annotate main.c @ 464:35d67bd0613b

Move str_*() functions to util.c
author Matti Hamalainen <ccr@tnsp.org>
date Sat, 26 May 2012 06:01:06 +0300
parents c956af023014
children 796508f828f6
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
421
4b7cd24dc943 Update copyright.
Matti Hamalainen <ccr@tnsp.org>
parents: 419
diff changeset
4 * (C) Copyright 2008-2012 Tecnic Software productions (TNSP)
39
Matti Hamalainen <ccr@tnsp.org>
parents: 36
diff changeset
5 */
413
14b685cdbd2c Rename files.
Matti Hamalainen <ccr@tnsp.org>
parents: 412
diff changeset
6 #include "util.h"
14b685cdbd2c Rename files.
Matti Hamalainen <ccr@tnsp.org>
parents: 412
diff changeset
7 #include "network.h"
0
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"
415
8263cb88556a Some #include cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 413
diff changeset
10 #include <errno.h>
8263cb88556a Some #include cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 413
diff changeset
11 #include <time.h>
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
12 #ifdef __WIN32
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
13 // Undefine because both windows.h and curses.h #define it
68
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
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
35 #define SET_PROFILE_PREFIX "http://www.newbienudes.com/profile/%s/"
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
36 #define SET_NICK_SEPARATOR ':'
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
37
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
38 #define SET_MAX_HISTORY (16) // Command history length
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
39 #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
40 #define SET_MAX_WINDOWS (32)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41
49
0bcc38910a77 Simple ringbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 46
diff changeset
42
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 /* Options
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 */
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
45 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
46 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
47 optProxyType = NN_PROXY_NONE;
207
e0c085426b91 Change default user color to black (#000000).
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
48 int optUserColor = 0x000000;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
49 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
50 *optProxyServer = NULL,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
51 *optUserName = NULL,
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
52 *optUserNameCmd = NULL,
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
53 *optUserNameEnc = NULL,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
54 *optPassword = NULL,
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
55 *optPasswordCmd = NULL,
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
56 *optLogFilename = NULL,
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
57 *optSite = "NN",
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
58 *optNickSepStr = NULL;
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
59 char optNickSep;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
60 BOOL optDaemon = FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
61 FILE *optLogFile = NULL;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
62 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
63 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
64 BOOL optLogEnable = FALSE;
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
65
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
66 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
67 *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
68 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
69 *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
70 *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
71
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
72 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
73 *setIdleMessages = NULL;
140
2d2ef5bbcc11 Use th-libs linked list code for managing ignore list.
Matti Hamalainen <ccr@tnsp.org>
parents: 139
diff changeset
74 nn_userhash_t *nnUsers = NULL;
137
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
75 char *setConfigFile = NULL,
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
76 *setBrowser = NULL;
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
77 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
78
273
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
79
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
80 /* Logging mode flags
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
81 */
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
82 enum
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
83 {
273
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
84 LOG_FILE = 1,
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
85 LOG_WINDOW = 2,
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
86 LOG_STAMP = 4
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
87 };
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
88
4d106ad65f26 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 268
diff changeset
89
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90 /* Arguments
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91 */
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
92 optarg_t optList[] =
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
93 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
94 { 0, '?', "help", "Show this help", OPT_NONE },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
95 { 1, 'v', "verbose", "Be more verbose", OPT_NONE },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
96 { 2, 'p', "port", "Connect to port", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
97 { 3, 's', "server", "Server to connect to", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
98 { 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
99 { 5, 'l', "logfile", "Log filename", OPT_ARGREQ },
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
100 { 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
101 { 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
102 { 8, 'd', "debug", "Enable various debug features", OPT_NONE },
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
103
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
104 {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
105 {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
106 {12, 'P', "proxy-port", "Proxy port (default: 1080)", OPT_ARGREQ },
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 };
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108
43
40ba8cdcf03a Cleanups, added a silly morse code conversion mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 41
diff changeset
109 const int optListN = (sizeof(optList) / sizeof(optList[0]));
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
112 void argShowHelp(void)
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
113 {
381
7c28f38cb6dd Update to use new th-libs from the subrepo.
Matti Hamalainen <ccr@tnsp.org>
parents: 376
diff changeset
114 th_print_banner(stdout, th_prog_name,
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
115 "[options] <username> <password>");
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
116
381
7c28f38cb6dd Update to use new th-libs from the subrepo.
Matti Hamalainen <ccr@tnsp.org>
parents: 376
diff changeset
117 th_args_help(stdout, optList, optListN);
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
118 }
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
119
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
120
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
121 BOOL argHandleOpt(const int optN, char *optArg, char *currArg)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
123 switch (optN)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
124 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
125 case 0:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
126 argShowHelp();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
127 exit(0);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
128 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
129
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
130 case 1:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
131 th_verbosityLevel++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
132 break;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
133
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
134 case 2:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
135 optPort = atoi(optArg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
136 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
138 case 3:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
139 optServer = optArg;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
140 break;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
141
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
142 case 4:
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
143 if ((optUserColor = th_get_hex_triplet(optArg)) < 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
144 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
145 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
146 optArg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
147 return FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
148 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
149 THMSG(1, "Using color #%06x\n", optUserColor);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
150 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
151
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
152 case 5:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
153 optLogFilename = optArg;
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
154 optLogEnable = TRUE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
155 break;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
156
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
157 case 7:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
158 optSite = optArg;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
159 break;
33
e49ea6febfeb Cleanups. Added option to specify/fake "site" where logging in from.
Matti Hamalainen <ccr@tnsp.org>
parents: 32
diff changeset
160
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
161 case 6:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
162 optDaemon = TRUE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
163 THMSG(1, "Running in pseudo-daemon mode.\n");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
164 break;
21
29098addfa65 Added a "daemon" mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 19
diff changeset
165
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
166 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
167 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
168 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
169 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
170
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
171
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 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
173 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
174 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
175 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
176
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 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
178 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
179 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
180 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
181
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
182 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
183 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
184 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
185
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
186
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
187 default:
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
188 THERR("Unknown option '%s'.\n", currArg);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
189 return FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
190 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
191
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
192 return TRUE;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196 BOOL argHandleFile(char *currArg)
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 {
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
198 if (!optUserNameCmd)
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
199 optUserNameCmd = currArg;
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
200 else if (!optPasswordCmd)
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
201 optPasswordCmd = currArg;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
202 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
203 {
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
204 THERR("Username '%s' already specified on commandline!\n", optUserNameCmd);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
205 return FALSE;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
206 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
207
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
208 return TRUE;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210
460
c956af023014 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 459
diff changeset
211
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
212 nn_window_t *nnwin_find(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
213 {
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
214 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
215
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
216 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
217 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
218 chatWindows[i]->id != NULL &&
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
219 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
220 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
221
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
222 return NULL;
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
223 }
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
224
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
225
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
226 BOOL nnwin_open(const char *name, BOOL curwin)
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
227 {
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
228 int i;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
229 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
230 if (name == NULL)
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
231 return FALSE;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
232
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
233 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
234 return FALSE;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
235
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
236 for (i = 1; i < SET_MAX_WINDOWS; i++)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
237 if (chatWindows[i] == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
238 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
239 res->num = i;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
240 chatWindows[i] = res;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
241 if (curwin)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
242 currWin = res;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
243 return TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
244 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
245
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
246 return FALSE;
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
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
250 void nnwin_close(nn_window_t *win)
291
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 int i;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
253 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
254
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
255 for (i = 1; i < SET_MAX_WINDOWS; i++)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
256 if (chatWindows[i] == win)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
257 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
258 chatWindows[i] = NULL;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
259 nn_window_free(win);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
260 return;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
261 }
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
262 }
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
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
265 void nnwin_update_statusline(void)
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
266 {
156
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
267 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
268 int i;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
269
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
270 if (statusWin == NULL) return;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
271
397
932829a556c7 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 391
diff changeset
272 str_get_timestamp(tmpStr, sizeof(tmpStr), "%H:%M:%S");
110
8af4072dc31a Fix Win32/MinGW/PDcurses issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
273
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
274 wbkgdset(statusWin, COLOR_PAIR(10));
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
275 werase(statusWin);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
276
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
277 wattrset(statusWin, A_BOLD | COLOR_PAIR(11));
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
278 mvwaddstr(statusWin, 0, 1, tmpStr);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
279
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
280 wattrset(statusWin, A_BOLD | COLOR_PAIR(13));
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
281 waddstr(statusWin, " | ");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
282 wattrset(statusWin, A_BOLD | COLOR_PAIR(16));
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
283 waddstr(statusWin, optUserName);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
284 wattrset(statusWin, A_BOLD | COLOR_PAIR(13));
29
a27ef0e359b9 Make statusline more informative.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
285
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
286 wattrset(statusWin, A_BOLD | COLOR_PAIR(13));
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
287 waddstr(statusWin, " | ");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
288 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
289 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
290 waddstr(statusWin, tmpStr);
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
291
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
292 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
293 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
294 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
295 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
296 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
297 currWin->pos);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
298 waddstr(statusWin, tmpStr);
29
a27ef0e359b9 Make statusline more informative.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
299
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
300 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
301 waddstr(statusWin, " | ");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
302 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
303
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
304 for (i = 0; i < SET_MAX_WINDOWS; i++)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
305 if (chatWindows[i] != NULL && chatWindows[i]->dirty)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
306 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
307 snprintf(tmpStr, sizeof(tmpStr), "%d ", i + 1);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
308 waddstr(statusWin, tmpStr);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
309 }
29
a27ef0e359b9 Make statusline more informative.
Matti Hamalainen <ccr@tnsp.org>
parents: 28
diff changeset
310
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
311 wrefresh(statusWin);
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
312 }
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
313
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
314
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
315 void nnwin_update_editbuf(nn_editbuf_t *buf)
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
316 {
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
317 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
318 if (editWin == NULL || buf == NULL) return;
32
67ec4073e38c Check for NULL pointers (fixes "daemon" mode)
Matti Hamalainen <ccr@tnsp.org>
parents: 31
diff changeset
319
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
320 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
321 tmp = nn_username_decode(th_strdup(buf->data));
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
322
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
323 werase(editWin);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
324
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
325 wattrset(editWin, A_NORMAL);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
326
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
327 if (buf->pos < buf->len)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
328 {
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);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
334 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
335 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
336 {
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
337 waddnstr(editWin, tmp, buf->len);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
338 wattrset(editWin, A_REVERSE);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
339 waddch(editWin, ' ');
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
340 wattrset(editWin, A_NORMAL);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
341 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
342 wrefresh(editWin);
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
343 th_free(tmp);
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
344 }
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
345
226
f25d47398326 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 225
diff changeset
346
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
347 int nnwin_print(WINDOW *win, const char *fmt)
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
348 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
349 const char *s = fmt;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
350 int col = 0;
141
cce05daf6f01 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 140
diff changeset
351
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
352 while (*s)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
353 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
354 if (*s == '½')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
355 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
356 s++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
357 if (*s == '½')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
358 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
359 waddch(win, ((unsigned char) *s) | col);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
360 s++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
361 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
362 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
363 {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
364 memcpy(&col, s, sizeof(int));
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
365 s += sizeof(int);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
366 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
367 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
368 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
369 {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
370 waddch(win, ((unsigned char) *s) | col);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
371 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
372 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
373 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
374 return 0;
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
375 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
376
62
ff5d74f0d428 Moved some functions to "libnnchat".
Matti Hamalainen <ccr@tnsp.org>
parents: 61
diff changeset
377
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
378 #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
379
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
380 int nnwin_print_buf(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
381 {
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
382 const char *s = fmt;
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
383 int col = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
384 while (*s)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
385 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
386 if (*s == '½')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
387 {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
388 s++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
389 if (*s == '½')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
390 {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
391 QPUTCH(*s);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
392 QPUTCH(*s);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
393 win->chlen++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
394 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
395 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
396 {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
397 int val = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
398 while (*s >= '0' && *s <= '9')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
399 {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
400 val *= 10;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
401 val += (*s - '0');
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
402 s++;
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 if (*s != '½') return -1;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
405
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
406 if (val < 9)
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
407 col = A_DIM | COLOR_PAIR(val);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
408 else if (val < 30)
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
409 col = A_BOLD | COLOR_PAIR(val - 9);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
410
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
411 QPUTCH('½');
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
412
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
413 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
414 return -2;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
415
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
416 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
417 win->len += sizeof(int);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
418 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
419 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
420 else if (*s == '\n')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
421 {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
422 QPUTCH('\n');
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
423 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
424 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
425 win->buf = NULL;
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
426 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
427 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
428 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
429 else if (*s != '\r')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
430 {
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
431 QPUTCH((unsigned char) *s == 255 ? ' ' : *s);
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
432 win->chlen++;
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
433 }
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
434
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
435 s++;
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
436 }
328
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
437
a8bda904846c More work towards a working backbuffer implementation.
Matti Hamalainen <ccr@tnsp.org>
parents: 326
diff changeset
438 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
439 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
440
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
441
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
442 BOOL nnwin_update_main(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
443 {
376
1617d0a0c58e Use getmaxy() instead of getmaxyx().
Matti Hamalainen <ccr@tnsp.org>
parents: 372
diff changeset
444 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
445 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
446
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
447 // Check pointers
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
448 if (mainWin == NULL || currWin == NULL)
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
449 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
450
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
451 // Check if update is forced or if the window is dirty
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
452 if (!force && !currWin->dirty)
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
453 return FALSE;
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
454
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
455 // 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
456 buf = currWin->data;
376
1617d0a0c58e Use getmaxy() instead of getmaxyx().
Matti Hamalainen <ccr@tnsp.org>
parents: 372
diff changeset
457 h = getmaxy(mainWin);
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
458
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
459 // 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
460 werase(mainWin);
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
461 scrollok(mainWin, 1);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
462 for (offs = buf->size - h - currWin->pos; offs >= 0 && offs < buf->size - currWin->pos && offs < buf->size; offs++)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
463 {
335
1f4def71b836 Back to simplistic backbuffer implementation due to laziness.
Matti Hamalainen <ccr@tnsp.org>
parents: 334
diff changeset
464 if (buf->data[offs] != NULL)
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
465 nnwin_print(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
466 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
467
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
468 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
469 wrefresh(mainWin);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
470 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
471 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
472
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
473
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
474 int printFile(FILE *outFile, const char *fmt)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
475 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
476 const char *s = fmt;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
477
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
478 while (*s)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
479 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
480 if (*s == '½')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
481 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
482 s++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
483 if (*s == '½')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
484 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
485 fputc((unsigned char) *s, outFile);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
486 s++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
487 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
488 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
489 {
74
98004129202a Portability fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 73
diff changeset
490 while (*s && isdigit((int) *s)) s++;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
491 if (*s != '½') return -1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
492 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
493 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
494 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
495 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
496 {
191
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
497 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
498 fputc(' ', outFile);
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
499 else
4007b9ac7cde Handle usernames with whitespace by converting whitespaces to chr 255 in
Matti Hamalainen <ccr@tnsp.org>
parents: 190
diff changeset
500 fputc((unsigned char) *s, outFile);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
501 s++;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
502 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
503 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
504
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
505 return 0;
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
506 }
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
507
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
508 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
509 {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
510 char tmpStr[128], *buf;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
511
397
932829a556c7 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 391
diff changeset
512 str_get_timestamp(tmpStr, sizeof(tmpStr), "½17½[½11½%H:%M:%S½17½]½0½ ");
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
513
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
514 buf = th_strdup_vprintf(fmt, ap);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
515
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
516 if (optLogFile && (flags & LOG_FILE))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
517 {
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
518 if (flags & LOG_STAMP) printFile(optLogFile, tmpStr);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
519 printFile(optLogFile, buf);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
520 fflush(optLogFile);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
521 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
522
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
523 if (!optDaemon && (flags & LOG_WINDOW))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
524 {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
525 nn_window_t *tmp = win != NULL ? win : chatWindows[0];
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
526 if (flags & LOG_STAMP) nnwin_print_buf(tmp, tmpStr);
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
527 nnwin_print_buf(tmp, buf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
528 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
529
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
530 th_free(buf);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
531 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
532
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
533 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
534 {
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
535 va_list ap;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
536
100
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
537 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
538 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
539 va_end(ap);
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
540 }
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
541
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
542 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
543 {
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
544 va_list ap;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
545
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
546 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
547 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
548 va_end(ap);
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
549 }
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
550
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
551 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
552 {
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
553 va_list ap;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
554
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
555 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
556 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
557 va_end(ap);
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
558 }
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
559
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
560
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
561 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
562
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
563 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
564 {
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
565 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
566
359
8f3c102db611 Fix SOCKS handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 354
diff changeset
567 printMsg(NULL, "%s", tmp);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
568
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
569 if (errorMessages != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
570 {
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
571 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
572 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
573 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
574 errorMessages = tmp2;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
575 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
576 else
223
03af28fb1c38 Show error messages printed out to stderr only after the program has quit.
Matti Hamalainen <ccr@tnsp.org>
parents: 222
diff changeset
577 errorMessages = tmp;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
578 }
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
579
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
580 void errorMsg(const char *fmt, ...)
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
581 {
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
582 va_list ap;
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
583
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
584 va_start(ap, fmt);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
585 errorMsgV(fmt, ap);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
586 va_end(ap);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
587 }
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
588
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
589 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
590 {
262
6d48fc4fd421 Shut up some trivial warnings.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
591 (void) conn;
236
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
592 errorMsgV(fmt, ap);
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
593 }
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
594
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
595 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
596 {
262
6d48fc4fd421 Shut up some trivial warnings.
Matti Hamalainen <ccr@tnsp.org>
parents: 258
diff changeset
597 (void) conn;
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
598 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
599 }
71fa0364c058 Report network errors to the user.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
600
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
601
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
602 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
603 {
265
b9c650db8a6a Rename variable nnIgnoreList to setIgnoreList.
Matti Hamalainen <ccr@tnsp.org>
parents: 264
diff changeset
604 qlist_t *node = setIgnoreList;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
605 while (node != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
606 {
372
b9f0bdad6285 Use th_strcasecmp() and th_strncasecmp().
Matti Hamalainen <ccr@tnsp.org>
parents: 369
diff changeset
607 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
608 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
609 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
610 }
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 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
612 }
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
613
801ac37321f6 Sanitize ignore handling; Also action messages and PRVs were not being properly ignored, fixed.
Matti Hamalainen <ccr@tnsp.org>
parents: 223
diff changeset
614
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
615 int nnproto_parse_user(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
616 {
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
617 BOOL isMine, isIgnored = FALSE;
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
618 char *name, *msg, *t;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
619
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
620 // Find start of the message
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
621 name = conn->ptr;
430
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
622 t = nn_conn_buf_strstr(conn, "</USER>");
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
623 if (!t) return 1;
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
624 *t = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
625
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
626 // Find end of the message
430
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
627 t = nn_conn_buf_strstr(conn, "<MESSAGE>");
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
628 if (!t) return 2;
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
629 msg = conn->ptr;
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
630
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
631 t = nn_conn_buf_strstr(conn, "</MESSAGE>");
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
632 if (!t) return 3;
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
633 *t = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
634
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
635 // Decode message string
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
636 msg = nn_decode_str1(msg);
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
637 if (!msg) return -1;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
638
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
639 // Decode username
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
640 name = nn_decode_str1(name);
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
641 if (!name)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
642 {
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
643 th_free(msg);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
644 return -2;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
645 }
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
646
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
647 /* 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
648 * that it is not our OWN username!
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
649 */
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
650 isMine = strcmp(name, optUserName) == 0;
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
651 isIgnored = setIgnoreMode && !isMine && checkIgnoreList(name);
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
652
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
653 // Is it a special control message?
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
654 if (*msg == '/')
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
655 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
656 // Ignore room join/leave messages
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
657 if (!optDebug && (strstr(msg, "left the room") || strstr(msg, "joined the room from")))
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
658 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
659
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
660 t = nn_strip_tags(msg + 1);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
661 if (!strncmp(t, "BPRV ", 5))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
662 {
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
663 char *in_name, *tmp, *in_msg, *h;
293
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
664 nn_window_t *win;
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
665 h = nn_decode_str2(t + 1);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
666
418
8ca09a6cca09 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
667 // Check type of
8ca09a6cca09 Minor cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 417
diff changeset
668 if ((isMine = strncmp(t, "BPRV from ", 10)) == 0)
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
669 in_name = nn_decode_str2(t + 10);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
670 else
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
671 in_name = nn_decode_str2(t + 8);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
672
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
673 for (tmp = in_name; *tmp && *tmp != ':'; tmp++);
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
674 if (tmp[0] != 0 && tmp[1] == ' ')
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
675 in_msg = tmp + 2;
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
676 else
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
677 in_msg = "";
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
678 *tmp = 0;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
679
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
680 isIgnored = setIgnoreMode && checkIgnoreList(in_name);
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
681 win = nnwin_find(in_name);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
682
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
683 if (win != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
684 {
388
f45673fe6b23 Log private messages always in the PRV format.
Matti Hamalainen <ccr@tnsp.org>
parents: 385
diff changeset
685 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
686 "½5½<½%d½%s½5½>½0½ %s\n",
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
687 isMine ? 14 : 15, isMine ? optUserName : in_name, in_msg);
388
f45673fe6b23 Log private messages always in the PRV format.
Matti Hamalainen <ccr@tnsp.org>
parents: 385
diff changeset
688
f45673fe6b23 Log private messages always in the PRV format.
Matti Hamalainen <ccr@tnsp.org>
parents: 385
diff changeset
689 printMsgF(NULL, LOG_FILE, "½11½%s½0½\n", h);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
690 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
691 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
692 {
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
693 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
694 "½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
695 }
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
696 th_free(in_name);
293
ff39ebf05b40 Fix unwindowed PRVs.
Matti Hamalainen <ccr@tnsp.org>
parents: 291
diff changeset
697 th_free(h);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
698 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
699 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
700 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
701 // 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
702 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
703 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
704 "½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
705 th_free(h);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
706 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
707 th_free(t);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
708 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
709 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
710 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
711 // 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
712 char *h;
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
713 t = nn_strip_tags(msg);
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
714 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
715 printMsgF(NULL, isIgnored ? LOG_FILE : (LOG_WINDOW | LOG_FILE),
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
716 "½5½<½%d½%s½5½>½0½ %s\n", isMine ? 14 : 15, name, h);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
717 th_free(h);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
718 th_free(t);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
719 }
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
720
229
08d4355d6fc9 Repair automatic PRV target setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 228
diff changeset
721 done:
417
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
722 th_free(msg);
ccee77fe4525 Fix protocol message parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 416
diff changeset
723 th_free(name);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
724 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
725 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
726
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
727
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
728 int nnproto_parse_login(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
729 {
156
0a9fe14882dc Introduce utility function getTimeStamp() and use it to lessen code duplication.
Matti Hamalainen <ccr@tnsp.org>
parents: 155
diff changeset
730 char tmpStr[256];
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
731 str_get_timestamp(tmpStr, sizeof(tmpStr), "%c");
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
732
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
733 if (!nn_conn_buf_strcmp(conn, "FAILURE>"))
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
734 {
430
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
735 nn_conn_buf_strstr(conn, "</LOGIN_FAILURE>");
437
8e9690a3f973 Fix parsing of LOGIN_{SUCCESS,FAILURE} packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 436
diff changeset
736 nn_conn_buf_strstr(conn, "</USER>");
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
737 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
738 return -2;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
739 }
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
740 else if (!nn_conn_buf_strcmp(conn, "SUCCESS>"))
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
741 {
430
aaadf6cea6be Better handling of some messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 429
diff changeset
742 nn_conn_buf_strstr(conn, "</LOGIN_SUCCESS>");
437
8e9690a3f973 Fix parsing of LOGIN_{SUCCESS,FAILURE} packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 436
diff changeset
743 nn_conn_buf_strstr(conn, "</USER>");
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
744 printMsg(NULL, "½2½Login success½0½ - ½3½%s½0½\n", tmpStr);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
745 nn_conn_send_msg(conn, optUserNameEnc, "%2FRequestUserList");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
746 return 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
747 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
748 else
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
749 return 1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
750 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
751
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
752
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
753 int nnproto_parse_add_user(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
754 {
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
755 char *p, *s, *str = conn->ptr;
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
756 nn_window_t *win;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
757
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
758 s = nn_conn_buf_strstr(conn, "</ADD_USER>");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
759 if (!s) return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
760 *s = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
761
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
762 p = nn_dbldecode_str(str);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
763 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
764
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
765 win = nnwin_find(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
766 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
767
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
768 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
769 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
770 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
771
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
772 th_free(p);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
773 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
774 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
775
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
776
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
777 int nnproto_parse_delete_user(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
778 {
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
779 char *p, *s, *str = conn->ptr;
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
780 nn_window_t *win;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
781
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
782 s = nn_conn_buf_strstr(conn, "</DELETE_USER>");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
783 if (!s) return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
784 *s = 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
785
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
786 p = nn_dbldecode_str(str);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
787 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
788
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
789 win = nnwin_find(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
790 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
791
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
792 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
793 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
794 printMsg(win, "! ½3½%s½0½ ½1½left the chat.½0½\n", p);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
795
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
796 th_free(p);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
797 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
798 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
799
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
800
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
801 int nnproto_parse_num_clients(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
802 {
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
803 nn_conn_buf_strstr(conn, "</NUMCLIENTS>");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
804 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
805 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
806
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
807
416
8bb69e749d97 Rename some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 415
diff changeset
808 int nnproto_parse_boot(nn_conn_t *conn)
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
809 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
810 (void) conn;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
811 errorMsg("Booted by server.\n");
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
812 return -1;
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
813 }
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
814
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
815
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
816 typedef struct
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
817 {
443
96cb82ebb93b Rename a structure member.
Matti Hamalainen <ccr@tnsp.org>
parents: 442
diff changeset
818 char *name;
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
819 size_t len;
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
820 int (*handler)(nn_conn_t *);
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
821 } nn_protocolcmd_t;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
822
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
823
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
824 static nn_protocolcmd_t protoCmds[] =
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
825 {
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
826 { "<USER>", 0, nnproto_parse_user },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
827 { "<LOGIN_", 0, nnproto_parse_login },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
828 { "<DELETE_USER>", 0, nnproto_parse_delete_user },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
829 { "<ADD_USER>", 0, nnproto_parse_add_user },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
830 { "<NUMCLIENTS>", 0, nnproto_parse_num_clients },
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
831 { "<BOOT />", 0, nnproto_parse_boot },
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
832 };
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
833
108
f323b137ca08 Tab-completion now works with cycling, but bugs with names that have whitespaces.
Matti Hamalainen <ccr@tnsp.org>
parents: 107
diff changeset
834 static const int nprotoCmds = sizeof(protoCmds) / sizeof(protoCmds[0]);
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
835
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
836
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
837 int nn_parse_protocol(nn_conn_t *conn)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
838 {
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
839 static BOOL protoCmdsInit = FALSE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
840 int i;
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
841
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
842 if (!protoCmdsInit)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
843 {
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
844 for (i = 0; i < nprotoCmds; i++)
443
96cb82ebb93b Rename a structure member.
Matti Hamalainen <ccr@tnsp.org>
parents: 442
diff changeset
845 protoCmds[i].len = strlen(protoCmds[i].name);
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
846
130
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
847 protoCmdsInit = TRUE;
352ec3c300e4 A different initialization.
Matti Hamalainen <ccr@tnsp.org>
parents: 129
diff changeset
848 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
849
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
850 for (i = 0; i < nprotoCmds; i++)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
851 {
443
96cb82ebb93b Rename a structure member.
Matti Hamalainen <ccr@tnsp.org>
parents: 442
diff changeset
852 if (!nn_conn_buf_strncmp(conn, protoCmds[i].name, protoCmds[i].len))
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
853 return protoCmds[i].handler(conn);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
854 }
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
855
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
856 if (optDebug)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
857 {
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
858 printMsg(NULL, "Unknown protocmd: \"%s\"\n", conn->ptr);
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
859 return 0;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
860 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
861 else
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
862 return 1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
863 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
864
402
563a70e8a303 Oops, these functions were moved/renamed and were left out from a previous commit. :|
Matti Hamalainen <ccr@tnsp.org>
parents: 401
diff changeset
865
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
866 int nncmd_open_profile(nn_conn_t *conn, char *name)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
867 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
868 char *uri, *enc_name = nn_encode_str1(name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
869 #ifdef __WIN32
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
870 HINSTANCE status;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
871 #else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
872 int status;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
873 int fds[2];
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
874 pid_t pid;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
875 #endif
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
876 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
877
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
878 printMsg(currWin, "Opening profile for: '%s'\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
879
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
880 #ifdef __WIN32
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
881 uri = th_strdup_printf(SET_PROFILE_PREFIX, enc_name);
442
ecbd9773c74b Minor win32 build fix.
Matti Hamalainen <ccr@tnsp.org>
parents: 439
diff changeset
882 status = ShellExecute(NULL, "open", uri, NULL, NULL, SW_SHOWNA);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
883 if (status <= (HINSTANCE) 32)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
884 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
885 printMsgQ(currWin, "Could not launch default web browser: %d\n", status);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
886 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
887 #else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
888
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
889 uri = th_strdup_printf("openurl(" SET_PROFILE_PREFIX ",new-tab)", enc_name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
890
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
891 if (pipe(fds) == -1)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
892 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
893 int ret = errno;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
894 printMsgQ(currWin, "Could not open process communication pipe! (%d, %s)\n", ret, strerror(ret));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
895 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
896 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
897
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
898 if ((pid = fork()) < 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
899 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
900 printMsgQ(currWin, "Could not create sub-process!\n");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
901 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
902 else if (pid == 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
903 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
904 dup2(fds[1], STDOUT_FILENO);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
905 dup2(fds[0], STDERR_FILENO);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
906 execlp(setBrowser, setBrowser, "-remote", uri, (void *)NULL);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
907 _exit(errno);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
908 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
909
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
910 wait(&status);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
911 #endif
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
912
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
913 th_free(uri);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
914 th_free(enc_name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
915 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
916 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
917
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
918
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
919 int nncmd_ignore(nn_conn_t *conn, char *name)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
920 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
921 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
922
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
923 if (name[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
924 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
925 // Add or remove someone to/from ignore
459
75ed7be2cfe8 Rename compareUsername() to str_compare().
Matti Hamalainen <ccr@tnsp.org>
parents: 457
diff changeset
926 qlist_t *user = th_llist_find_func(setIgnoreList, name, str_compare);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
927 if (user != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
928 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
929 printMsgQ(currWin, "Removed user '%s' from ignore.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
930 th_llist_delete_node(&setIgnoreList, user);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
931 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
932 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
933 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
934 printMsgQ(currWin, "Now ignoring '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
935 th_llist_append(&setIgnoreList, th_strdup(name));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
936 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
937 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
938 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
939 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
940 // Just list whomever is in ignore now
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
941 qlist_t *user = setIgnoreList;
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
942 size_t nuser = th_llist_length(setIgnoreList);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
943 char *result = th_strdup_printf("Users ignored (%d): ", nuser);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
944 while (user != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
945 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
946 if (user->data != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
947 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
948 th_pstr_printf(&result, "%s'%s'", result, (char *) user->data);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
949 if (--nuser > 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
950 th_pstr_printf(&result, "%s, ", result);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
951 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
952 user = user->next;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
953 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
954 printMsgQ(currWin, "%s\n", result);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
955 th_free(result);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
956 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
957
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
958 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
959 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
960
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
961
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
962 int nncmd_set_color(nn_conn_t *conn, char *arg)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
963 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
964 int val;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
965 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
966
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
967 if ((val = th_get_hex_triplet(arg)) < 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
968 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
969 printMsgQ(currWin, "Invalid color value '%s'\n", arg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
970 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
971 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
972
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
973 optUserColor = val;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
974 printMsgQ(currWin, "Setting color to #%06x\n", optUserColor);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
975 nn_conn_send_msg_v(conn, optUserNameEnc, "%%2FSetFontColor%%20%%2Dcolor%%20%06X", optUserColor);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
976 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
977 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
978
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
979
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
980 int nncmd_open_query(nn_conn_t *conn, char *name)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
981 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
982 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
983
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
984 if (name[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
985 {
446
3396acd40147 Rename and remove some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 445
diff changeset
986 nn_user_t *user = nn_userhash_find(nnUsers, nn_username_encode(name));
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
987 if (user != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
988 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
989 name = nn_username_decode(th_strdup(user->name));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
990 printMsgQ(currWin, "Opening PRV query for '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
991 if (nnwin_open(name, TRUE))
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
992 printMsgQ(currWin, "In PRV query with '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
993 th_free(name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
994 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
995 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
996 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
997 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
998 printMsgQ(currWin, "Could not find username '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
999 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1000 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1001 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1002 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1003 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1004 printMsgQ(currWin, "Usage: /query username\n");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1005 printMsgQ(currWin, "To close a PRV query, use /close [username]\n");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1006 printMsgQ(currWin, "/close without username will close the current PRV window, if any.\n");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1007 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1008 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1009 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1010
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1011
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1012 int nncmd_close_query(nn_conn_t *conn, char *name)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1013 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1014 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1015
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1016 if (name[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1017 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1018 nn_window_t *win = nnwin_find(name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1019 if (win != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1020 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1021 nnwin_close(win);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1022 printMsgQ(currWin, "Closed PRV query to '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1023 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1024 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1025 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1026 printMsgQ(currWin, "No PRV query by name '%s'.\n", name);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1027 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1028 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1029 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1030 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1031 if (currWin != chatWindows[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1032 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1033 nnwin_close(currWin);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1034 currWin = chatWindows[0];
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1035 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1036 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1037 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1038 printMsgQ(currWin, "Usage: /close [username]\n");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1039 printMsgQ(currWin, "/close without username will close the current PRV window. if any.\n");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1040 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1041 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1042
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1043 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1044 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1045
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1046
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1047 int nncmd_window_info(nn_conn_t *conn, char *arg)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1048 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1049 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1050
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1051 if (arg[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1052 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1053 int val = atoi(arg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1054 if (val >= 1 && val < SET_MAX_WINDOWS)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1055 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1056 if (chatWindows[val - 1] != NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1057 currWin = chatWindows[val - 1];
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1058 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1059 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1060 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1061 printMsgQ(currWin, "Invalid window number '%s'\n", arg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1062 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1063 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1064 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1065 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1066 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1067 printMsgQ(currWin, "Window : #%d\n", currWin->num);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1068 printMsgQ(currWin, "ID : %s\n", currWin->id);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1069 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1070 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1071 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1072
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1073
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1074 int nncmd_list_all_users(nn_conn_t *conn, char *buf)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1075 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1076 (void) buf;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1077
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1078 // Alias /listallusers
425
143fd51048a9 Fix /list command.
Matti Hamalainen <ccr@tnsp.org>
parents: 424
diff changeset
1079 return nn_conn_send_msg(conn, optUserNameEnc, "%2Flistallusers");
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1080 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1081
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1082
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1083 int nncmd_names(nn_conn_t *conn, char *buf)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1084 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1085 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1086 (void) buf;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1087
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1088 printMsgQ(currWin, "Not implemented yet.\n");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1089 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1090 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1091
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1092
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1093 int nncmd_save_config(nn_conn_t *conn, char *buf)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1094 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1095 (void) conn;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1096 (void) buf;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1097
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1098 FILE *cfgfile = fopen(setConfigFile, "w");
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1099 if (cfgfile == NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1100 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1101 printMsgQ(currWin, "Could not create configuration to file '%s': %s\n",
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1102 setConfigFile, strerror(errno));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1103 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1104 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1105
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1106 printMsgQ(currWin, "Configuration saved in file '%s', res=%d\n",
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1107 setConfigFile,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1108 th_cfg_write(cfgfile, setConfigFile, cfg));
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1109
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1110 fclose(cfgfile);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1111 return 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1112 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1113
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1114
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1115 enum
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1116 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1117 CMDARG_NONE,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1118 CMDARG_STRING,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1119 CMDARG_OPTIONAL,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1120 CMDARG_NICK,
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1121 };
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1122
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1123 typedef struct
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1124 {
443
96cb82ebb93b Rename a structure member.
Matti Hamalainen <ccr@tnsp.org>
parents: 442
diff changeset
1125 char *name;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1126 int flags;
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
1127 size_t len;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1128 int (*handler)(nn_conn_t *, char *buf);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1129 } nn_usercmd_t;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1130
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1131
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1132 static nn_usercmd_t userCmdsTable[] =
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1133 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1134 // Server side commands, we just implement completion
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1135 { "/me", CMDARG_STRING, 0, NULL },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1136 { "/status", CMDARG_STRING, 0, NULL },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1137 { "/list", CMDARG_NONE, 0, nncmd_list_all_users },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1138
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1139 // List internal username list
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1140 { "/who", CMDARG_NONE, 0, nncmd_names },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1141 { "/names", CMDARG_NONE, 0, nncmd_names },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1142
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1143 { "/w", CMDARG_NICK, 0, nncmd_open_profile },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1144 { "/profile", CMDARG_NICK, 0, nncmd_open_profile },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1145
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1146 { "/query", CMDARG_NICK, 0, nncmd_open_query },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1147 { "/close", CMDARG_OPTIONAL, 0, nncmd_close_query },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1148 { "/win", CMDARG_OPTIONAL, 0, nncmd_window_info },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1149
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1150 { "/ignore", CMDARG_NICK, 0, nncmd_ignore },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1151 { "/color", CMDARG_STRING, 0, nncmd_set_color },
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1152 { "/save", CMDARG_NONE, 0, nncmd_save_config },
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1153 };
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1154
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1155 static qlist_t *userCmds = NULL;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1156
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1157
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1158 void nn_usercmd_init()
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1159 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1160 size_t i;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1161 for (i = 0; i < sizeof(userCmdsTable) / sizeof(userCmdsTable[0]); i++)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1162 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1163 th_llist_append(&userCmds, &userCmdsTable[i]);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1164 userCmdsTable[i].len = strlen(userCmdsTable[i].name);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1165 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1166 }
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1167
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1168
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1169 int nn_handle_command(nn_conn_t *conn, char *buf)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1170 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1171 qlist_t *curr;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1172
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1173 for (curr = userCmds; curr != NULL; curr = curr->next)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1174 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1175 nn_usercmd_t *cmd = curr->data;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1176
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1177 if (!th_strncasecmp(buf, cmd->name, cmd->len))
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1178 {
457
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
1179 char *nbuf;
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
1180 if (buf[cmd->len] != 0 && !th_isspace(buf[cmd->len]))
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
1181 continue;
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
1182
69ce77696c5d Fix command precedence.
Matti Hamalainen <ccr@tnsp.org>
parents: 456
diff changeset
1183 nbuf = str_trim_left(buf + cmd->len);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1184
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1185 switch (cmd->flags)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1186 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1187 case CMDARG_NICK:
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1188 case CMDARG_STRING:
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1189 if (!nbuf[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1190 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1191 printMsgQ(currWin, "Command %s requires an argument.\n", cmd->name);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1192 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1193 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1194 break;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1195
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1196 case CMDARG_NONE:
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1197 if (nbuf[0])
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1198 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1199 printMsgQ(currWin, "Command %s does not take arguments.\n", cmd->name);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1200 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1201 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1202 break;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1203
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1204 case CMDARG_OPTIONAL:
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1205 break;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1206 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1207
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1208 // Check if there is a handler function
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1209 if (cmd->handler)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1210 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1211 // Internal commands have a handler
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1212 return cmd->handler(conn, nbuf);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1213 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1214 else
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1215 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1216 // Server-side commands are just pass-through here
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1217 char *tmp = nn_dblencode_str(buf);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1218 BOOL result;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1219 if (tmp == NULL) return -2;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1220 result = nn_conn_send_msg(conn, optUserNameEnc, tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1221 th_free(tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1222 return result ? 0 : -1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1223 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1224 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1225 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1226
444
29a341fa80a1 Fix cosmetic output issue.
Matti Hamalainen <ccr@tnsp.org>
parents: 443
diff changeset
1227 printMsgQ(currWin, "Unknown command: %s\n", buf);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1228 return 1;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1229 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1230
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1231
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1232 static nn_usercmd_t *nn_usercmd_match_do(qlist_t *list, const char *pattern, size_t len)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1233 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1234 qlist_t *node;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1235 for (node = list; node != NULL; node = node->next)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1236 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1237 nn_usercmd_t *cmd = node->data;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1238 if (len <= strlen(cmd->name) && th_strncasecmp(cmd->name, pattern, len) == 0)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1239 return cmd;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1240 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1241 return NULL;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1242 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1243
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1244
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1245 nn_usercmd_t *nn_usercmd_match(qlist_t *list, const char *pattern, const char *current, BOOL again)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1246 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1247 nn_usercmd_t *curr;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1248 size_t len;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1249
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1250 if (list == NULL || pattern == NULL) return NULL;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1251
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1252 len = strlen(pattern);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1253
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1254 if (current != NULL)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1255 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1256 qlist_t *node;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1257 for (node = list; node != NULL; node = node->next)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1258 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1259 curr = node->data;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1260 if (th_strcasecmp(curr->name, current) == 0)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1261 {
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1262 if (again)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1263 return curr;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1264
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1265 if ((curr = nn_usercmd_match_do(node->next, pattern, len)) != NULL)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1266 return curr;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1267 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1268 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1269 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1270
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1271 if ((curr = nn_usercmd_match_do(list, pattern, len)) != NULL)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1272 return curr;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1273
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1274 return NULL;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1275 }
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1276
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1277
410
7ea78f4a4d23 Rename input handling main function.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
1278 int nn_handle_input(nn_conn_t *conn, char *buf, size_t bufLen)
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1279 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1280 BOOL result;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1281 char *tmp;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1282
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1283 // Trim right side
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1284 if (bufLen > 0) buf[--bufLen] = 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1285 while (bufLen > 0 && th_isspace(buf[bufLen - 1]))
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1286 buf[--bufLen] = 0;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1287
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1288 if (buf[0] == 0)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1289 return 1;
258
8a0f7446318e General cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 254
diff changeset
1290
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1291 // 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
1292 nn_username_decode(buf);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1293
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1294 // Check for commands
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1295 if (buf[0] == '/')
426
c2e4d7b4e0ae Fix server-side commands.
Matti Hamalainen <ccr@tnsp.org>
parents: 425
diff changeset
1296 return nn_handle_command(conn, buf);
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1297
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1298 // If current window is not the main room window, send private
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1299 if (currWin != chatWindows[0])
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1300 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1301 if (currWin->id != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1302 {
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
1303 char *msg = th_strdup_printf("/prv -to %s -msg %s", currWin->id, buf);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1304 if (msg == NULL) return -3;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1305 tmp = nn_dblencode_str(msg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1306 if (tmp == NULL)
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1307 {
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1308 th_free(msg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1309 return -2;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1310 }
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1311 result = nn_conn_send_msg(conn, optUserNameEnc, tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1312 th_free(tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1313 th_free(msg);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1314 return result ? 0 : -1;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1315 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1316 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1317 {
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
1318 printMsgQ(NULL, "No target set, exiting prv mode.\n");
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1319 return 1;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1320 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1321 }
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
1322
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1323 // Send double-encoded message
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1324 tmp = nn_dblencode_str(buf);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1325 if (tmp == NULL) return -2;
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1326 result = nn_conn_send_msg(conn, optUserNameEnc, tmp);
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1327 th_free(tmp);
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1328 return result ? 0 : -1;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1329 }
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1330
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1331
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
1332 void nnwin_close_windows(void)
155
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1333 {
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1334 if (mainWin) delwin(mainWin);
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1335 if (statusWin) delwin(statusWin);
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1336 if (editWin) delwin(editWin);
0720ca51673e Plug some minor "memory leaks" related to curses.
Matti Hamalainen <ccr@tnsp.org>
parents: 154
diff changeset
1337 }
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1338
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1339
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
1340 BOOL nnwin_initialize_windows(void)
46
65b1ac6a1e2e Support for resizing the terminal on fly. Not perfect, but works.
Matti Hamalainen <ccr@tnsp.org>
parents: 45
diff changeset
1341 {
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
1342 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
1343
9e7f52878725 Use getmaxyx() instead of LINES and COLS globals as recommended by curses programming guidelines.
Matti Hamalainen <ccr@tnsp.org>
parents: 117
diff changeset
1344 getmaxyx(stdscr, h, w);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1345
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
1346 nnwin_close_windows();
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
1347
209
e1bfd5227a24 Use curses subwin(stdscr, ...) instead of newwin().
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
1348 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
1349 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
1350 editWin = subwin(stdscr, 3, w, h - 3, 0);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1351
318
4acfcca39105 Don't THERR() in initializeWindows(), just return FALSE.
Matti Hamalainen <ccr@tnsp.org>
parents: 316
diff changeset
1352 if (mainWin == NULL || statusWin == NULL || editWin == NULL)
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1353 return FALSE;
318
4acfcca39105 Don't THERR() in initializeWindows(), just return FALSE.
Matti Hamalainen <ccr@tnsp.org>
parents: 316
diff changeset
1354
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1355 return TRUE;
46
65b1ac6a1e2e Support for resizing the terminal on fly. Not perfect, but works.
Matti Hamalainen <ccr@tnsp.org>
parents: 45
diff changeset
1356 }
65b1ac6a1e2e Support for resizing the terminal on fly. Not perfect, but works.
Matti Hamalainen <ccr@tnsp.org>
parents: 45
diff changeset
1357
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1358
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
1359 void nnwin_update_all(void)
179
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1360 {
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1361 if (mainWin) redrawwin(mainWin);
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1362 if (statusWin) redrawwin(statusWin);
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1363 if (editWin) redrawwin(editWin);
8c493b5671bd Add separate updateWindows() function.
Matti Hamalainen <ccr@tnsp.org>
parents: 175
diff changeset
1364 }
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1365
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1366
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1367 static void nn_tabcomplete_replace(nn_editbuf_t *buf, size_t *pi, const size_t startPos, const size_t endPos, char *c)
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1368 {
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1369 size_t i;
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1370
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1371 for (i = startPos; i <= endPos; i++)
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1372 nn_editbuf_delete(buf, startPos);
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1373
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1374 for (i = startPos; *c; i++, c++)
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1375 nn_editbuf_insert(buf, i, *c);
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1376
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1377 *pi = i;
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1378 }
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1379
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1380
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1381 static void nn_tabcomplete_finish(nn_editbuf_t *buf, char **previous, const size_t startPos, const char *name)
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1382 {
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1383 nn_editbuf_setpos(buf, startPos + 1 + strlen(name));
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1384 th_free(*previous);
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1385 *previous = th_strdup(name);
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1386 }
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1387
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1388
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1389 BOOL nn_tabcomplete_buffer(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
1390 {
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1391 static char *previous = NULL, *pattern = NULL;
451
733396469e5d Cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 450
diff changeset
1392 char *str = buf->data;
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1393 BOOL again = FALSE, hasSeparator = FALSE,
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1394 hasSpace, newPattern = FALSE, isCommand;
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
1395 size_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
1396
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1397 // previous word
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1398 if (startPos >= 2 && str[startPos - 1] == ' ' && str[startPos - 2] != ' ')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1399 {
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1400 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
1401 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
1402 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
1403 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1404 else
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1405 // middle of a word, new pattern
404
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1406 if (startPos < buf->len && str[startPos] != ' ')
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1407 {
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1408 endPos = startPos;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1409 while (startPos > 0 && str[startPos - 1] != ' ') startPos--;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1410 while (endPos < buf->len - 1 && str[endPos + 1] != ' ') endPos++;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1411 newPattern = TRUE;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1412 }
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1413 else
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1414 // previous word, new pattern
404
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1415 if (startPos >= 1 && str[startPos - 1] != ' ')
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1416 {
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1417 startPos -= 1;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1418 endPos = startPos;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1419 while (startPos > 0 && str[startPos - 1] != ' ') startPos--;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1420 newPattern = TRUE;
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1421 }
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1422 else
d11a68f214eb Fix indentation after astyle reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 403
diff changeset
1423 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
1424
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1425 // Check if this is a command completion
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1426 isCommand = (str[0] == '/' && startPos == 0);
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1427
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1428 if (!isCommand && str[endPos] == optNickSep)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1429 {
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1430 endPos--;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1431 if (startPos > 0)
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1432 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
1433 hasSeparator = TRUE;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1434 }
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1435
451
733396469e5d Cosmetic cleanups.
Matti Hamalainen <ccr@tnsp.org>
parents: 450
diff changeset
1436 hasSpace = (buf->pos > 0 && str[buf->pos - 1] == ' ') ||
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1437 (buf->pos <= buf->len && str[buf->pos] == ' ');
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1438
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1439 if (newPattern)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1440 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1441 // 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
1442 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
1443 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
1444 again = TRUE;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1445
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1446 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
1447 pattern = npattern;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1448
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1449 if (!again)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1450 {
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1451 th_free(previous);
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1452 previous = NULL;
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1453 }
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1454 }
116
741e45592522 Add simple "prediction" into tab-completion based on previously gotten last
Matti Hamalainen <ccr@tnsp.org>
parents: 115
diff changeset
1455
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1456 if (!pattern)
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1457 return FALSE;
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1458
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1459 if (isCommand)
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1460 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1461 nn_usercmd_t *cmd = nn_usercmd_match(userCmds, pattern, previous, again);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1462 if (cmd)
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1463 {
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1464 size_t i;
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1465 nn_tabcomplete_replace(buf, &i, startPos, endPos, cmd->name);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1466
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1467 if (!hasSpace)
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1468 nn_editbuf_insert(buf, i++, ' ');
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1469
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1470 nn_tabcomplete_finish(buf, &previous, startPos, cmd->name);
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1471 return TRUE;
429
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1472 }
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1473 }
2ac24f1e241b Start working on command completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 427
diff changeset
1474 else
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1475 {
446
3396acd40147 Rename and remove some functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 445
diff changeset
1476 nn_user_t *user = nn_userhash_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
1477
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1478 if (user)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1479 {
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
1480 size_t i;
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1481 nn_tabcomplete_replace(buf, &i, startPos, endPos, user->name);
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1482
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1483 if (!hasSeparator && startPos == 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1484 {
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1485 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
1486 startPos++;
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1487 }
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1488 else
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1489 if (hasSeparator)
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1490 startPos++;
447
2d650408f5de Modularize tab completion code a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 446
diff changeset
1491
189
b0d64dde62af Fix username tab completion. Should now work like in Irssi, though the
Matti Hamalainen <ccr@tnsp.org>
parents: 188
diff changeset
1492 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
1493 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
1494
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
1495 nn_tabcomplete_finish(buf, &previous, startPos, 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
1496 return TRUE;
107
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1497 }
8037a3a7e491 Implement username tab-completion. It's still buggy, tho.
Matti Hamalainen <ccr@tnsp.org>
parents: 104
diff changeset
1498 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1499
113
2a53156e7e12 Yay, tab-completion cycling now works (except for usernames with whitespaces, of course ...)
Matti Hamalainen <ccr@tnsp.org>
parents: 112
diff changeset
1500 return FALSE;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1501 }
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1502
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1503
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
1504 #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
1505 #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
1506
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1507 char *logParseFilename(const char *fmt, int id)
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1508 {
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
1509 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
1510 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
1511 char tmpBuf[32];
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1512 const char *s = fmt;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1513
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1514 while (*s)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1515 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1516 if (*s == '%')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1517 {
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1518 s++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1519 switch (*s)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1520 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1521 case 'i':
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1522 snprintf(tmpBuf, sizeof(tmpBuf), "%05d", id);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1523 VPUTS(tmpBuf);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1524 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
1525
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1526 case 'd':
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1527 snprintf(tmpBuf, sizeof(tmpBuf), "%d", id);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1528 VPUTS(tmpBuf);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1529 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
1530
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1531 case '%':
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1532 VPUTCH('%');
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1533 break;
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1534 }
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1535 s++;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1536 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1537 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1538 {
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1539 VPUTCH(*s);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1540 s++;
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1541 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1542 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1543
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1544 VPUTCH(0);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1545 return bufData;
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1546 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1547
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1548
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1549 BOOL logFileOpen(void)
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1550 {
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1551 char *filename;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1552
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1553 if (optLogFilename == NULL || !optLogEnable)
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1554 return FALSE;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1555
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1556 filename = logParseFilename(optLogFilename, optPort);
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1557
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1558 if ((optLogFile = fopen(filename, "a")) == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1559 {
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1560 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
1561 th_free(filename);
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1562 return FALSE;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1563 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1564
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1565 th_free(filename);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1566
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1567 return TRUE;
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1568 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1569
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1570
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1571 void logFileClose(void)
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1572 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1573 if (optLogFile)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1574 {
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1575 fclose(optLogFile);
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1576 optLogFile = NULL;
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1577 }
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1578 }
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1579
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1580
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
1581 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
1582 {
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
1583 char tmpBuf[512], *ptr;
431
a9b20b31cae1 More code cleanups, this time using clang with excessive warnings enabled.
Matti Hamalainen <ccr@tnsp.org>
parents: 430
diff changeset
1584 size_t pos;
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1585 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
1586
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1587 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
1588 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
1589 wgetnstr(win, tmpBuf, sizeof(tmpBuf) - 1);
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1590 noecho();
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1591 if (curVis != ERR)
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1592 curs_set(curVis);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1593
401
3f20ac9a9e1d Using th_isspace() should be enough to detect \r and \n.
Matti Hamalainen <ccr@tnsp.org>
parents: 400
diff changeset
1594 for (pos = strlen(tmpBuf) - 1; pos > 0 && th_isspace(tmpBuf[pos]); pos--)
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
1595 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
1596
398
c345a8efb1d4 Rename another function.
Matti Hamalainen <ccr@tnsp.org>
parents: 397
diff changeset
1597 ptr = str_trim_left(tmpBuf);
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
1598
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
1599 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
1600 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
1601 else
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1602 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
1603 }
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1604
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1605
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
1606 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
1607 {
340
cbbe2e797f55 Cosmetics in help message.
Matti Hamalainen <ccr@tnsp.org>
parents: 339
diff changeset
1608 printMsgQ(currWin, "\n"
400
ec974049ccba Reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 399
diff changeset
1609 "NNChat Help\n"
ec974049ccba Reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 399
diff changeset
1610 "===========\n"
ec974049ccba Reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 399
diff changeset
1611 "\n"
ec974049ccba Reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 399
diff changeset
1612 "F1 This help.\n"
ec974049ccba Reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 399
diff changeset
1613 "F2 \n"
ec974049ccba Reindent.
Matti Hamalainen <ccr@tnsp.org>
parents: 399
diff changeset
1614 );
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
1615 }
b9c15c57dc8f Clean up message functions, add new printMsgQ() helper function for messages that should not
Matti Hamalainen <ccr@tnsp.org>
parents: 321
diff changeset
1616
405
b4ed5d574edc Add some empty lines.
Matti Hamalainen <ccr@tnsp.org>
parents: 404
diff changeset
1617
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1618 int main(int argc, char *argv[])
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1619 {
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1620 nn_conn_t *conn = NULL;
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1621 int curVis = ERR, updateCount = 0;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1622 BOOL argsOK, isError = FALSE,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1623 exitProg = FALSE,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1624 colorSet = FALSE,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1625 cursesInit = FALSE,
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1626 networkInit = FALSE,
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1627 insertMode = TRUE,
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1628 firstUpdate = TRUE;
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
1629 time_t prevTime;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1630 char *tmpStr;
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1631 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
1632 nn_editbuf_t *histBuf[SET_MAX_HISTORY+2];
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1633 int histPos = 0, histMax = 0;
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1634
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1635 cfgitem_t *tmpcfg;
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1636 char *setHomeDir = 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
1637
313
7c96f52e9a3b memset() history buffer variable unconditionally to avoid derefencing uninitialized memory.
Matti Hamalainen <ccr@tnsp.org>
parents: 309
diff changeset
1638 memset(histBuf, 0, sizeof(histBuf));
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1639
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1640 // 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
1641 th_init("NNChat", "Newbie Nudes chat client", NN_VERSION,
399
06a1c1db5bbb Update copyright.
Matti Hamalainen <ccr@tnsp.org>
parents: 398
diff changeset
1642 "Written and designed by Anonymous Finnish Guy (C) 2008-2012",
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1643 "This software is freeware, use and distribute as you wish.");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1644 th_verbosityLevel = 0;
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1645
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1646 // Read configuration file
148
9da39d090ef1 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 147
diff changeset
1647 tmpcfg = NULL;
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1648 th_cfg_add_comment(&tmpcfg, "General settings");
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1649 th_cfg_add_string(&tmpcfg, "username", &optUserName, NULL);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1650 th_cfg_add_string(&tmpcfg, "password", &optPassword, NULL);
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1651
150
db5e7a1f1eb3 Add comment in config file about format of user color setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 149
diff changeset
1652 th_cfg_add_comment(&tmpcfg, "Default color as a hex-triplet");
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1653 th_cfg_add_hexvalue(&tmpcfg, "color", &optUserColor, optUserColor);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1654
149
a4d6707161a7 Add config file option for default setting of ignore mode.
Matti Hamalainen <ccr@tnsp.org>
parents: 148
diff changeset
1655 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
1656 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
1657 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
1658 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
1659
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
1660 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
1661 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
1662
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1663 th_cfg_add_comment(&tmpcfg, "Character used as nickname auto-completion separator (default is ':')");
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1664 th_cfg_add_string(&tmpcfg, "nick_separator", &optNickSepStr, NULL);
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1665
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1666 th_cfg_add_section(&cfg, "general", tmpcfg);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1667
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
1668
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1669 tmpcfg = NULL;
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1670 th_cfg_add_comment(&tmpcfg, "Chat server hostname or IP address");
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1671 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
1672 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
1673 th_cfg_add_int(&tmpcfg, "port", &optPort, optPort);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1674 th_cfg_add_section(&cfg, "server", tmpcfg);
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1675
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1676 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
1677 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
1678 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
1679 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
1680 th_cfg_add_string(&tmpcfg, "host", &optProxyServer, optProxyServer);
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1681 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
1682 th_cfg_add_int(&tmpcfg, "port", &optProxyPort, optProxyPort);
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1683 th_cfg_add_section(&cfg, "proxy", tmpcfg);
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1684
83ae825bb8c1 Add configuration section for proxy settings.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
1685 tmpcfg = NULL;
239
b7e7ed741a18 Add unfinished code for logfile name parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 233
diff changeset
1686 th_cfg_add_comment(&tmpcfg, "Enable logging");
247
fce4e2e31d69 Add the config section ...
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
1687 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
1688 th_cfg_add_comment(&tmpcfg, "Log filename format");
247
fce4e2e31d69 Add the config section ...
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
1689 th_cfg_add_string(&tmpcfg, "filename", &optLogFilename, optLogFilename);
fce4e2e31d69 Add the config section ...
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
1690 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
1691
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1692 #ifdef __WIN32
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1693 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1694 char tmpPath[MAX_PATH];
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1695 if (SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, tmpPath) == S_OK)
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1696 setHomeDir = th_strdup(tmpPath);
197
e0ec2280a778 Implement browser launching on Windows via ShellExecute().
Matti Hamalainen <ccr@tnsp.org>
parents: 196
diff changeset
1697
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1698 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
1699 }
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1700 #else
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1701 setHomeDir = th_strdup(getenv("HOME"));
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1702 #endif
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1703
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1704 if (setHomeDir != NULL)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1705 {
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1706 FILE *cfgfile;
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
1707 setConfigFile = th_strdup_printf("%s" SET_DIR_SEPARATOR "%s", setHomeDir, SET_CONFIG_FILE);
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1708
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1709 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
1710
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1711 if ((cfgfile = fopen(setConfigFile, "r")) != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1712 {
154
e8f67e344aaf Get correct directory for saving configuration under Windows.
Matti Hamalainen <ccr@tnsp.org>
parents: 153
diff changeset
1713 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
1714 fclose(cfgfile);
864e6e52ed69 Fix a filehandle leak when reading in configuration file.
Matti Hamalainen <ccr@tnsp.org>
parents: 314
diff changeset
1715 }
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
1716 }
196
edd5ce3e5399 Add simplistic username/password requester if none given on commandline or config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
1717
409
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1718 if (optNickSepStr)
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1719 optNickSep = optNickSepStr[0];
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1720 else
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1721 optNickSep = SET_NICK_SEPARATOR;
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1722
4556174b5be8 Make nickname autocomplete separator configurable.
Matti Hamalainen <ccr@tnsp.org>
parents: 408
diff changeset
1723
137
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1724 setBrowser = getenv("BROWSER");
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1725 if (setBrowser == NULL)
fad8c31e41e6 Move browser code around a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 134
diff changeset
1726 setBrowser = "firefox";
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1727
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1728 // Parse command line arguments
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1729 argsOK = th_args_process(argc, argv, optList, optListN,
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1730 argHandleOpt, argHandleFile, FALSE);
26
b84fc46c6035 Improved color hex triplet parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 25
diff changeset
1731
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1732 if (optUserNameCmd != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1733 {
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1734 optUserName = optUserNameCmd;
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1735 optPassword = optPasswordCmd;
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1736 }
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
1737
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1738 if (!argsOK)
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1739 return -2;
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
1740
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1741 // Allocate userhash
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1742 if ((nnUsers = nn_userhash_new()) == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1743 {
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1744 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
1745 return -105;
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
1746 }
64
6a3a917303e4 Some random cleanups, bring back WinSock support.
Matti Hamalainen <ccr@tnsp.org>
parents: 63
diff changeset
1747
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1748 // If no idle messages are set, add default
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1749 if (setIdleMessages == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1750 {
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
1751 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
1752 }
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
1753
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1754 // Open logfile
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
1755 logFileOpen();
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1756
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1757 // Initialize network
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1758 if (!nn_network_init())
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1759 {
91
acfc4b4bc180 Create network initialization functions in libnnchat and move Win32/WinSock code there.
Matti Hamalainen <ccr@tnsp.org>
parents: 90
diff changeset
1760 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
1761 goto err_exit;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1762 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1763 else
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1764 networkInit = TRUE;
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
1765
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1766 // Initialize NCurses
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1767 if (!optDaemon)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1768 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1769 if (LINES < 0 || LINES > 1000) LINES = 24;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1770 if (COLS < 0 || COLS > 1000) COLS = 80;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1771 initscr();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1772 raw();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1773 keypad(stdscr, TRUE);
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1774 noecho();
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1775 meta(stdscr, TRUE);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1776 timeout(SET_DELAY);
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1777 curVis = curs_set(0);
110
8af4072dc31a Fix Win32/MinGW/PDcurses issues.
Matti Hamalainen <ccr@tnsp.org>
parents: 109
diff changeset
1778
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1779 if (has_colors())
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1780 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1781 start_color();
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1782
185
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1783 init_pair( 1, COLOR_RED, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1784 init_pair( 2, COLOR_GREEN, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1785 init_pair( 3, COLOR_YELLOW, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1786 init_pair( 4, COLOR_BLUE, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1787 init_pair( 5, COLOR_MAGENTA, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1788 init_pair( 6, COLOR_CYAN, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1789 init_pair( 7, COLOR_WHITE, COLOR_BLACK);
73bdf1ede348 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 184
diff changeset
1790 init_pair( 8, COLOR_BLACK, COLOR_BLACK);
28
512775f6b081 A refactored ncurses-based UI.
Matti Hamalainen <ccr@tnsp.org>
parents: 27
diff changeset
1791
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1792 init_pair(10, COLOR_BLACK, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1793 init_pair(11, COLOR_WHITE, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1794 init_pair(12, COLOR_GREEN, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1795 init_pair(13, COLOR_YELLOW, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1796 init_pair(14, COLOR_BLUE, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1797 init_pair(15, COLOR_MAGENTA, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1798 init_pair(16, COLOR_CYAN, COLOR_RED);
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1799 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1800
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1801 cursesInit = TRUE;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1802
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
1803 if (!nnwin_initialize_windows())
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1804 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
1805
346
102fb74fc794 Set window title when running under PDCurses.
Matti Hamalainen <ccr@tnsp.org>
parents: 342
diff changeset
1806 #ifdef PDCURSES
102fb74fc794 Set window title when running under PDCurses.
Matti Hamalainen <ccr@tnsp.org>
parents: 342
diff changeset
1807 PDC_set_title("NNChat v" NN_VERSION);
102fb74fc794 Set window title when running under PDCurses.
Matti Hamalainen <ccr@tnsp.org>
parents: 342
diff changeset
1808 #endif
102fb74fc794 Set window title when running under PDCurses.
Matti Hamalainen <ccr@tnsp.org>
parents: 342
diff changeset
1809
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1810 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
1811 chatWindows[0] = nn_window_new(NULL);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1812 currWin = chatWindows[0];
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
1813 nnwin_update_statusline();
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
1814 }
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
1815
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1816 // Check if we have username and password
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1817 if (cursesInit && (optUserName == NULL || optPassword == NULL))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1818 {
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
1819 nnwin_print(editWin, "You can avoid this prompt by issuing '/save' after logging in.\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
1820 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
1821 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
1822 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1823
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1824 if (optUserName == NULL || optPassword == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1825 {
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
1826 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
1827 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
1828 }
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
1829
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1830 // Create a connection
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1831 conn = nn_conn_new(errorFunc, messageFunc);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1832 if (conn == NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1833 {
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1834 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
1835 goto err_exit;
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1836 }
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1837
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1838 // Are we using a proxy?
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1839 if (optProxyType != NN_PROXY_NONE && optProxyServer != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1840 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1841 if (nn_conn_set_proxy(conn, optProxyType, optProxyPort, optProxyServer) != 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1842 {
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1843 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
1844 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
1845 }
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
1846 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1847
456
bb65460c7aa2 Clean up some initialization messages.
Matti Hamalainen <ccr@tnsp.org>
parents: 451
diff changeset
1848 // Okay, try to resolve the hostname
354
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1849 conn->host = th_strdup(optServer);
c01e42fc9adb More work on SOCKS proxy support, should work now.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
1850 conn->hst = nn_resolve_host(conn, optServer);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1851 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
1852 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
1853
329
c0988ab45afd #ifdef out the policy probe.
Matti Hamalainen <ccr@tnsp.org>
parents: 328
diff changeset
1854 #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
1855 /* 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
1856 * 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
1857 */
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1858 if (nn_conn_open(conn, 843, NULL) != 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1859 {
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
1860 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
1861 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
1862 }
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
1863
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
1864 tmpStr = "<policy-file-request/>";
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1865 if (nn_conn_send_buf(conn, tmpStr, strlen(tmpStr) + 1) == FALSE)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1866 {
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
1867 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
1868 goto err_exit;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1869 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1870 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1871 {
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
1872 int cres = nn_conn_pull(conn);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1873 if (cres == 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1874 {
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1875 printMsg(currWin, "Probe got: %s\n", conn->buf);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1876 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1877 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1878 {
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 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
1880 }
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
1881 }
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
1882 nn_conn_close(conn);
329
c0988ab45afd #ifdef out the policy probe.
Matti Hamalainen <ccr@tnsp.org>
parents: 328
diff changeset
1883 #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
1884
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1885 // Okay, now do the proper connection ...
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1886 if (nn_conn_open(conn, optPort, NULL) != 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1887 {
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
1888 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
1889 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
1890 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1891
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1892 // 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
1893 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
1894 tmpStr = nn_dblencode_str(optSite);
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
1895 nn_conn_send_msg_v(conn, optUserNameEnc, "%%2Flogin%%20%%2Dsite%%20%s%%20%%2Dpassword%%20%s", tmpStr, optPassword);
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
1896 th_free(tmpStr);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1897
450
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1898 // Initialize user commands
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1899 nn_usercmd_init();
a8373a1ce1eb Implement command tab completion.
Matti Hamalainen <ccr@tnsp.org>
parents: 449
diff changeset
1900
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1901 // Initialize random numbers
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
1902 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
1903 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
1904
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1905 if (cursesInit)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1906 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1907 // Initialize rest of interactive UI code
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
1908 nn_editbuf_clear(editBuf);
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
1909
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1910 // First update of screen
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
1911 nnwin_update_editbuf(editBuf);
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
1912 nnwin_update_statusline();
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1913
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
1914 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
1915 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
1916 printMsg(NULL, "%s\n", th_prog_license);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1917 }
100
ed4067c10a8a Remove useless buffer usage from error reporting function.
Matti Hamalainen <ccr@tnsp.org>
parents: 98
diff changeset
1918
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1919 // Enter mainloop
360
b465a17ffa47 Finally fix handling of long packets.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
1920 nn_conn_reset(conn);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1921 while (!isError && !exitProg)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1922 {
445
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1923 int retries = 3, cres;
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1924
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1925 packet_retry:
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1926 cres = nn_conn_pull(conn);
439
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1927 if (cres == 0)
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1928 {
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1929 while (conn->ptr < conn->in_ptr &&
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1930 *(conn->in_ptr - 1) == 0 &&
445
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1931 retries > 0 && !isError)
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1932 {
439
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1933 // nn_conn_dump_buffer(stderr, conn);
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
1934 int result = nn_parse_protocol(conn);
436
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1935 if (result == 0)
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1936 {
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1937 nn_conn_buf_skip(conn, 1);
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1938 }
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1939 else
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1940 if (result > 0)
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1941 {
445
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1942 // Retry if possible
439
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1943 if (--retries > 0)
445
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1944 goto packet_retry;
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1945
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1946 // Couldn't handle the message for some reason
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1947 printMsg(currWin, "Could not handle: %s\n", conn->ptr);
7e46f2f0ba34 Cleanup packet retrying a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 444
diff changeset
1948 nn_conn_buf_skip(conn, strlen(conn->ptr) + 1);
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1949 }
436
Matti Hamalainen <ccr@tnsp.org>
parents: 435
diff changeset
1950 else
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
1951 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1952 // Fatal error, quit
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
1953 errorMsg("Fatal error with message: %s\n", conn->ptr);
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1954 isError = TRUE;
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1955 }
403
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
1956 }
7bec02f382fb Refactor the connection and protocol handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 402
diff changeset
1957 }
439
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1958 else
70ea06294f3f Possibly fix packet handling after the whole mess of refactoring.
Matti Hamalainen <ccr@tnsp.org>
parents: 437
diff changeset
1959 if (cres < 0 || !nn_conn_check(conn))
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1960 isError = TRUE;
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
1961
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1962 // Handle user input
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1963 if (cursesInit)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1964 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
1965 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
1966 BOOL update = FALSE, updateMain = FALSE;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1967
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1968 // Handle several buffered keypresses at once
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1969 do
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1970 {
77
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1971 c = wgetch(stdscr);
411
664b94a58dbe Add few comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1972
664b94a58dbe Add few comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1973 /* Handle various problematic cases where terminal
664b94a58dbe Add few comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1974 * keycodes do not get properly translated by curses
664b94a58dbe Add few comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 410
diff changeset
1975 */
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1976 if (c == 0x1b)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1977 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1978 // ^[O
77
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1979 c = wgetch(stdscr);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1980 if (c == 'O')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1981 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1982 c = wgetch(stdscr);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1983 switch (c)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1984 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1985 case 'd':
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1986 c = 0x204;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1987 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1988 case 'c':
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1989 c = 0x206;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1990 break;
77
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1991 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
1992 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
1993 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
1994 break;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1995 }
77
e8c9d7d13866 Handle certain key sequences better.
Matti Hamalainen <ccr@tnsp.org>
parents: 75
diff changeset
1996 }
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
1997 // ^[[
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1998 else if (c == '[')
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
1999 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2000 c = wgetch(stdscr);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2001 switch (c)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2002 {
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
2003 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
2004 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
2005 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
2006 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
2007 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
2008 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
2009 break;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2010
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2011 case 0x32:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2012 c = KEY_IC;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2013 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2014 case 0x33:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2015 c = KEY_DC;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2016 break;
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
2017
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2018 case 0x35:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2019 c = KEY_PPAGE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2020 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2021 case 0x36:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2022 c = KEY_NPAGE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2023 break;
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
2024
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2025 case 0x37:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2026 c = KEY_HOME;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2027 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2028 case 0x38:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2029 c = KEY_END;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2030 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2031
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
2032 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
2033 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
2034 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
2035 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
2036 break;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2037 }
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2038 // Get the trailing ~
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2039 if (c != ERR)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2040 wgetch(stdscr);
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
2041 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2042 if (c >= 0x31 && c <= 0x39)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2043 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2044 // Chat window switching via Meta/Esc-[1..9]
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2045 int win = c - 0x31;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2046 if (win < SET_MAX_WINDOWS && chatWindows[win] != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2047 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2048 currWin = chatWindows[win];
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2049 update = updateMain = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2050 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2051 c = ERR;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2052 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2053 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2054 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2055 if (optDebug)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2056 printMsg(currWin, "Unhandled ESC key sequence 0x%02x\n", c);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2057 }
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
2058 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2059 #if defined(__WIN32) && defined(PDCURSES)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2060 else if (c >= 0x198 && c <= 0x1a0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2061 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2062 // Chat window switching via Meta/Esc-[1..9]
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2063 int win = c - 0x198;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2064 if (win < SET_MAX_WINDOWS && chatWindows[win] != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2065 {
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
2066 currWin = chatWindows[win];
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
2067 update = updateMain = TRUE;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
2068 }
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
2069 c = ERR;
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
2070 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2071 #endif
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2072
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2073 switch (c)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2074 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2075 #ifdef KEY_RESIZE
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2076 case KEY_RESIZE:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2077 resize_term(0, 0);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2078 erase();
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2079 timeout(SET_DELAY);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2080
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
2081 if (!nnwin_initialize_windows())
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2082 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2083 errorMsg("Error resizing curses chatWindows\n");
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2084 isError = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2085 }
332
f55f8309aa66 Support alt-[1..9] under Windows/PDCurses/SDL port for buffer switching.
Matti Hamalainen <ccr@tnsp.org>
parents: 331
diff changeset
2086 update = updateMain = TRUE;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2087 break;
341
ece94ae2a051 Handling of certain Curses keycodes only works as intended under
Matti Hamalainen <ccr@tnsp.org>
parents: 340
diff changeset
2088 #endif
119
4bc63a535acb Fix some PDCurses incompatibilities and remove some Win32/PDCurses specific hacks.
Matti Hamalainen <ccr@tnsp.org>
parents: 118
diff changeset
2089
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2090 case KEY_ENTER:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2091 case '\n':
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2092 case '\r':
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2093 // Call the user input handler
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2094 if (editBuf->len > 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2095 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2096 int result;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2097
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2098 if (histMax > 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2099 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2100 nn_editbuf_free(histBuf[SET_MAX_HISTORY+1]);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2101 histBuf[SET_MAX_HISTORY+1] = NULL;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2102 memmove(&histBuf[2], &histBuf[1], histMax * sizeof(histBuf[0]));
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2103 }
320
42ddc8bda6a9 Sanitize RESIZE event.
Matti Hamalainen <ccr@tnsp.org>
parents: 319
diff changeset
2104
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2105 histPos = 0;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2106 histBuf[1] = nn_editbuf_copy(editBuf);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2107 if (histMax < SET_MAX_HISTORY) histMax++;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2108
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2109 nn_editbuf_insert(editBuf, editBuf->len, 0);
410
7ea78f4a4d23 Rename input handling main function.
Matti Hamalainen <ccr@tnsp.org>
parents: 409
diff changeset
2110 result = nn_handle_input(conn, editBuf->data, editBuf->len);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2111
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2112 nn_editbuf_clear(editBuf);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2113
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2114 if (result < 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2115 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2116 errorMsg("Fatal error handling user input: %s\n", editBuf->data);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2117 isError = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2118 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2119 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2120 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2121 // Update time value of last sent message for unidle timeouts
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2122 prevTime = time(NULL);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2123 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2124
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2125 updateMain = update = TRUE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2126 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2127 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2128
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2129 case KEY_UP: // Backwards in input history
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2130 if (histPos == 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2131 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2132 nn_editbuf_free(histBuf[0]);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2133 histBuf[0] = nn_editbuf_copy(editBuf);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2134 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2135 if (histPos < histMax)
385
bbd5edbf1143 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 381
diff changeset
2136 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2137 histPos++;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2138 nn_editbuf_free(editBuf);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2139 editBuf = nn_editbuf_copy(histBuf[histPos]);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2140 update = TRUE;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2141 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2142 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2143
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2144 case KEY_DOWN: // Forwards in input history
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2145 if (histPos > 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2146 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2147 histPos--;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2148 nn_editbuf_free(editBuf);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2149 editBuf = nn_editbuf_copy(histBuf[histPos]);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2150 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2151 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2152 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2153
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2154 case 0x204: // ctrl+left arrow = Skip words left
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2155 case 0x20b:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2156 while (editBuf->pos > 0 && isspace((int) editBuf->data[editBuf->pos - 1]))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2157 editBuf->pos--;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2158 while (editBuf->pos > 0 && !isspace((int) editBuf->data[editBuf->pos - 1]))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2159 editBuf->pos--;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2160 update = TRUE;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2161 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2162
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2163 case 0x206: // ctrl+right arrow = Skip words right
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2164 case 0x210:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2165 while (editBuf->pos < editBuf->len && isspace((int) editBuf->data[editBuf->pos]))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2166 editBuf->pos++;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2167 while (editBuf->pos < editBuf->len && !isspace((int) editBuf->data[editBuf->pos]))
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2168 editBuf->pos++;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2169 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2170 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2171
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2172 case KEY_HOME:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2173 nn_editbuf_setpos(editBuf, 0);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2174 update = TRUE;
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2175 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2176 case KEY_END:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2177 nn_editbuf_setpos(editBuf, editBuf->len);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2178 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2179 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2180 case KEY_LEFT:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2181 nn_editbuf_setpos(editBuf, editBuf->pos - 1);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2182 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2183 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2184 case KEY_RIGHT:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2185 nn_editbuf_setpos(editBuf, editBuf->pos + 1);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2186 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2187 break;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
2188
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2189 case KEY_BACKSPACE:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2190 case 0x08:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2191 case 0x7f:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2192 nn_editbuf_delete(editBuf, editBuf->pos - 1);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2193 nn_editbuf_setpos(editBuf, editBuf->pos - 1);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2194 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2195 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2196
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2197 case KEY_DC: // Delete character
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2198 nn_editbuf_delete(editBuf, editBuf->pos);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2199 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2200 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2201
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
2202
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2203 case KEY_IC: // Ins = Toggle insert / overwrite mode
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2204 insertMode = !insertMode;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2205 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2206 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2207
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2208 case KEY_F(1): // F1 = Print help
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2209 printHelp();
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2210 updateMain = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2211 break;
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
2212
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2213 case KEY_F(2): // F2 = Clear editbuffer
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2214 nn_editbuf_clear(editBuf);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2215 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2216 break;
103
eaa524e153f9 Initial implementation of functions for implementing tab-completion for user names.
Matti Hamalainen <ccr@tnsp.org>
parents: 100
diff changeset
2217
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2218 case KEY_F(5): // F5 = Ignore mode
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2219 setIgnoreMode = !setIgnoreMode;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2220 printMsgQ(currWin, "Ignore mode = %s\n", setIgnoreMode ? "ON" : "OFF");
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2221 break;
334
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
2222
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
2223 #if 0
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2224 case KEY_F(8): // F8 = Debug
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2225 optDebug = !optDebug;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2226 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2227 break;
334
3c7676b2b367 #if'd out code for F8 = toggle debug mode key.
Matti Hamalainen <ccr@tnsp.org>
parents: 333
diff changeset
2228 #endif
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2229
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2230 case 0x03: // ^C = quit
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2231 case KEY_F(9): // F9 = Quit
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2232 printMsg(currWin, "Quitting per user request (%d/0x%x).\n", c, c);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2233 exitProg = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2234 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2235
449
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
2236 case 0x09: // Tab = complete username or command
7d9fa9f7caf1 Rename tab completion functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 448
diff changeset
2237 nn_tabcomplete_buffer(editBuf);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2238 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2239 break;
122
e564dd9df07c Change some key defines.
Matti Hamalainen <ccr@tnsp.org>
parents: 121
diff changeset
2240
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2241 case 0x0c: // Ctrl + L
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
2242 nnwin_update_all();
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2243 update = updateMain = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2244 break;
230
b64500bb7fbe Some yet-unused backbuffer related code.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
2245
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2246 case KEY_NPAGE:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2247 case KEY_PPAGE:
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2248 // Page Up / Page Down
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2249 if (currWin != NULL)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2250 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2251 int oldPos = currWin->pos;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2252
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2253 currWin->pos += (c == KEY_NPAGE) ? -10 : +10;
331
26097c5b9b71 Change how backbuffer offset is handled.
Matti Hamalainen <ccr@tnsp.org>
parents: 330
diff changeset
2254
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2255 if (currWin->pos < 0)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2256 currWin->pos = 0;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2257 else if (currWin->pos >= currWin->data->n - 10)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2258 currWin->pos = currWin->data->n - 10;
230
b64500bb7fbe Some yet-unused backbuffer related code.
Matti Hamalainen <ccr@tnsp.org>
parents: 229
diff changeset
2259
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2260 if (oldPos != currWin->pos)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2261 updateMain = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2262 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2263 break;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2264
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2265 case ERR:
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2266 // Ignore
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2267 break;
122
e564dd9df07c Change some key defines.
Matti Hamalainen <ccr@tnsp.org>
parents: 121
diff changeset
2268
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2269 default:
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2270 if (isprint(c) || c == 0xe4 || c == 0xf6 || c == 0xc4 || c == 0xd6)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2271 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2272 if (insertMode)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2273 nn_editbuf_insert(editBuf, editBuf->pos, c);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2274 else
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2275 nn_editbuf_write(editBuf, editBuf->pos, c);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2276 nn_editbuf_setpos(editBuf, editBuf->pos + 1);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2277 update = TRUE;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2278 }
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2279 else
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2280 {
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2281 if (optDebug)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2282 printMsg(currWin, "Unhandled key: 0x%02x\n", c);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2283 }
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2284 break;
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2285 }
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2286 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2287 while (c != ERR && !exitProg && ++cnt < 10);
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2288
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
2289 nnwin_update_main(updateMain);
389
19cb995994c9 Change screen update strategy a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 388
diff changeset
2290
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2291 if (update || firstUpdate)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2292 {
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2293 // Update edit line
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
2294 nnwin_update_statusline();
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
2295 nnwin_update_editbuf(editBuf);
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2296 firstUpdate = FALSE; // a nasty hack ...
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2297 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2298
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2299 } // cursesInit
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2300
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2301 if (++updateCount > 10)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2302 {
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
2303 time_t tmpTime = time(NULL);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2304 if (tmpTime - prevTime > SET_KEEPALIVE)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2305 {
435
708a15fdf791 Fix a type / conversion related warning.
Matti Hamalainen <ccr@tnsp.org>
parents: 432
diff changeset
2306 size_t n = ((size_t) random()) % th_llist_length(setIdleMessages);
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
2307 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
2308 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
2309 prevTime = tmpTime;
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
2310 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2311
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2312 if (!colorSet)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2313 {
96
7c9538e71c89 Add connection keepalive by sending /listallusers every 15 minutes,
Matti Hamalainen <ccr@tnsp.org>
parents: 92
diff changeset
2314 colorSet = TRUE;
424
aeb24b1b5e77 Refactor the /command handling completely.
Matti Hamalainen <ccr@tnsp.org>
parents: 422
diff changeset
2315 nn_conn_send_msg_v(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
2316 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2317
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
2318 nnwin_update_statusline();
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
2319 nnwin_update_editbuf(editBuf);
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2320 updateCount = 0;
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2321 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2322
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2323 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2324
419
d015ecbd231d Use C99 style comments, too.
Matti Hamalainen <ccr@tnsp.org>
parents: 418
diff changeset
2325 // 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
2326 err_exit:
316
1065115665bd Plug some more minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 315
diff changeset
2327 th_cfg_free(cfg);
432
966c521e0954 Rename user home directory variable.
Matti Hamalainen <ccr@tnsp.org>
parents: 431
diff changeset
2328 th_free(setHomeDir);
316
1065115665bd Plug some more minor memory leaks.
Matti Hamalainen <ccr@tnsp.org>
parents: 315
diff changeset
2329 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
2330 nn_userhash_free(nnUsers);
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
2331 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
2332
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
2333 {
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2334 int i;
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2335 for (i = 0; i <= SET_MAX_HISTORY; i++)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2336 nn_editbuf_free(histBuf[i]);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
2337
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2338 for (i = 0; i < SET_MAX_WINDOWS; i++)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2339 nn_window_free(chatWindows[i]);
288
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
2340 }
e7ef3db3b954 Implement "windows" in the chat. Only main window used for now, and even
Matti Hamalainen <ccr@tnsp.org>
parents: 280
diff changeset
2341
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
2342 #ifdef __WIN32
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2343 if (errorMessages)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2344 {
275
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
2345 char *tmp;
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
2346 wclear(editWin);
66b90d71548b Improve interactive prompts, etc.
Matti Hamalainen <ccr@tnsp.org>
parents: 273
diff changeset
2347 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
2348 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
2349 }
291
cc2a1d837e7b Window / buffer functionality works now. Queries work (with few minor glitches).
Matti Hamalainen <ccr@tnsp.org>
parents: 289
diff changeset
2350 #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
2351
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2352 if (cursesInit)
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2353 {
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2354 if (curVis != ERR)
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2355 curs_set(curVis);
422
8eb2839a565c Rename various functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 421
diff changeset
2356 nnwin_close_windows();
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2357 endwin();
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2358 THMSG(1, "NCurses deinitialized.\n");
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2359 }
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2360
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
2361 #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
2362 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
2363 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
2364 #endif
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2365
198
21a37995c3fb Make configuration username/password overridable on command line.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
2366 th_free(optUserNameEnc);
10
53e127854dca WinSock support fixes.
Matti Hamalainen <ccr@tnsp.org>
parents: 9
diff changeset
2367
168
2e4850ece456 Partially re-factor connection handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 165
diff changeset
2368 nn_conn_close(conn);
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2369
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2370 if (networkInit)
97
218efd2f0641 Rename functions for clarity.
Matti Hamalainen <ccr@tnsp.org>
parents: 96
diff changeset
2371 nn_network_close();
68
3ab7751fdad1 MingW compatibility, with one ugly kludge.
Matti Hamalainen <ccr@tnsp.org>
parents: 67
diff changeset
2372
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2373 THMSG(1, "Connection terminated.\n");
391
a2b7ac328e62 Code cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents: 389
diff changeset
2374
242
cb86d7543be2 Add functionality for generating logfile names based on port etc. and
Matti Hamalainen <ccr@tnsp.org>
parents: 240
diff changeset
2375 logFileClose();
133
ffe8bbd429fa Config file.
Matti Hamalainen <ccr@tnsp.org>
parents: 132
diff changeset
2376
70
5228ad7b4f57 Remove tabs from indentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 69
diff changeset
2377 return 0;
0
728243125263 Import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2378 }