Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
BitchX
GitHub Repository: BitchX/BitchX1.3
Path: blob/master/bx-conf/file_cpy.c
1069 views
1
/*
2
* Program source is Copyright 1998 Colten Edwards.
3
* Written specifically for configuring BitchX config.h
4
*/
5
6
#include <stdlib.h>
7
#include <string.h>
8
#include <stdio.h>
9
#include <signal.h>
10
#include <ctype.h>
11
#include <fcntl.h>
12
#include <dirent.h>
13
#include <sys/stat.h>
14
#include <errno.h>
15
#include <unistd.h>
16
#ifdef __EMX__
17
#include <sys/types.h>
18
#endif
19
20
#include <ncurses.h>
21
22
#include "ds_cell.h"
23
#include "ds_keys.h"
24
#include "func_pr.h"
25
26
27
28
extern int mapcolors;
29
/*extern _DS_CONFIG config;*/
30
extern int desc_changed;
31
32
/* Default answer replies for yes/no prompts*/
33
_default default_answer[5] = {
34
{'Y', TRUE},
35
{'N', FALSE},
36
{13, FALSE},
37
{27, FALSE},
38
{'\0', FALSE}
39
};
40
41
42
#define YN_ROW 18
43
#define YN_COL 5
44
45
#define PATHCOL 9
46
#define MAXLEN 280
47
48
/* Some local function prototypes */
49
int update_select(CELL *c);
50
char *fmt_long(unsigned long int val);
51
int main_dir (CELL *c);
52
int compile_dir (CELL *c);
53
int edit_dir (CELL *c);
54
int flood_dir (CELL *c);
55
int userlist_dir (CELL *c);
56
int toggle_select (CELL *c);
57
int edit_enter (CELL *c);
58
int save_file (CELL *c);
59
int exit_program(CELL *c);
60
int dcc_dir (CELL *c);
61
int server_dir (CELL *c);
62
int various_dir (CELL *c);
63
int load_dir (CELL *c);
64
65
#define USER_PATH 20
66
#define TOGGLE_FILES 21
67
68
69
#define NONE_TYPE 0
70
#define BOOL_TYPE 1
71
#define INT_TYPE 2
72
#define STR_TYPE 3
73
74
/* Function Table for file routines */
75
struct FuncTable file_cpy_table[] = {
76
{LS_END , ls_end},
77
{LS_HOME , ls_home},
78
{LS_PGUP , ls_pgup},
79
{LS_PGDN , ls_pgdn},
80
{CURSOR_UP , cursor_up},
81
{CURSOR_DN , cursor_dn},
82
{LS_QUIT , ls_quit},
83
{WRAP_CURSOR_UP , NULL},
84
{WRAP_CURSOR_DN , NULL},
85
{DO_SHELL , NULL},
86
{LS_ENTER , update_select },
87
{UPFUNC , NULL },
88
{TOGGLE , NULL },
89
{PLUS_IT , plus_it},
90
{MINUS_IT , minus_it},
91
{0 , NULL}};
92
93
struct FuncTable compile_cpy_table[] = {
94
{LS_END , ls_end},
95
{LS_HOME , ls_home},
96
{LS_PGUP , ls_pgup},
97
{LS_PGDN , ls_pgdn},
98
{CURSOR_UP , cursor_up},
99
{CURSOR_DN , cursor_dn},
100
{LS_QUIT , ls_quit},
101
{WRAP_CURSOR_UP , NULL},
102
{WRAP_CURSOR_DN , NULL},
103
{DO_SHELL , NULL},
104
{LS_ENTER , toggle_select },
105
{UPFUNC , NULL },
106
{TOGGLE , NULL },
107
{PLUS_IT , plus_it},
108
{MINUS_IT , minus_it},
109
{0 , NULL}};
110
111
struct FuncTable edit_cpy_table[] = {
112
{LS_END , ls_end},
113
{LS_HOME , ls_home},
114
{LS_PGUP , ls_pgup},
115
{LS_PGDN , ls_pgdn},
116
{CURSOR_UP , cursor_up},
117
{CURSOR_DN , cursor_dn},
118
{LS_QUIT , ls_quit},
119
{WRAP_CURSOR_UP , NULL},
120
{WRAP_CURSOR_DN , NULL},
121
{DO_SHELL , NULL},
122
{LS_ENTER , edit_enter },
123
{0 , NULL}};
124
125
/* Menu Table for File routines */
126
struct KeyTable file_cpy_menu[] = {
127
{KEY_END,LS_END,"End"},
128
{KEY_HOME, LS_HOME, "Home"},
129
{KEY_PPAGE, LS_PGUP, "PgUp"},
130
{KEY_NPAGE, LS_PGDN, "PgDn"},
131
{KEY_UP, CURSOR_UP, "Up"},
132
{KEY_DOWN, CURSOR_DN, "Down"},
133
{ESC, LS_QUIT, "Quit"},
134
{ALT_X, LS_QUIT, "Quit"},
135
{KEY_F(9), DO_SHELL, "Shell"},
136
{SPACE, TOGGLE, "Toggle On/Off"},
137
{'\n', LS_ENTER, "Change Dir"},
138
{'\r', LS_ENTER, "Change Dir"},
139
{'+', PLUS_IT, "Add Mark"},
140
{'-', MINUS_IT,"Take Mark"},
141
{-1, -1, ""}};
142
143
144
typedef struct _config_type {
145
char *option;
146
char *help;
147
char *out;
148
int integer;
149
int type;
150
int (*func)(CELL *c);
151
} Configure;
152
153
Configure config_type[] = {
154
{ "Compile Defaults", "Compile time defaults within the client", NULL, 0, 0, compile_dir },
155
{ "Flood Settings", "Change the flood protection settings", NULL, 0, 0, flood_dir },
156
{ "Userlist/Shitlist", "Change settings for the Userlist Shitlist options", NULL, 0, 0, userlist_dir },
157
{ "DCC Settings", "Change various DCC settings", NULL, 0, 0, dcc_dir },
158
{ "Server Settings", "Change various server and away settings", NULL, 0, 0, server_dir },
159
{ "Various Settings", "Change Miscellaneous settings", NULL, 0, 0, various_dir },
160
{ "Save .config.h", "Save .config.h", NULL, 0, 0, save_file},
161
{ "Load .config.h", "Load a saved .config.h", NULL, 0, 0, load_dir},
162
{ "Exit", "Exit this program", NULL, 0, 0, exit_program},
163
{ NULL, NULL, NULL, 0, 0, NULL }
164
};
165
166
#define ON 1
167
#define OFF 0
168
169
Configure compile_default[] = {
170
{ "Lite BitchX", "Disables ALOT of options below to make the client smaller", "BITCHX_LITE", OFF, BOOL_TYPE, NULL },
171
{ "Link Looker", "Enable LinkLook. This is deprecated as well as dangerous", "WANT_LLOOK", ON, BOOL_TYPE, NULL },
172
{ "Plugin support", "Enable plugins on supported OS\'s", "WANT_DLL", ON, BOOL_TYPE, NULL },
173
{ "OperView", "Enable OperView window support", "WANT_OPERVIEW", ON, BOOL_TYPE, NULL },
174
{ "CDCC support", "Enable builtin cdcc which is a XDCC file offer clone", "WANT_CDCC", ON, BOOL_TYPE, NULL },
175
{ "DCC ftp support", "Enable builtin ftp support", "WANT_FTP", ON, BOOL_TYPE, NULL },
176
{ "Internal Screen", "Enable builtin screen utility for /detach", "WANT_DETACH", ON, BOOL_TYPE, NULL },
177
{ "EPIC help file support", "Enable epic helpfile support and /ehelp", "WANT_EPICHELP", ON, BOOL_TYPE, NULL},
178
{ "Humble\'s Hades color","Another color option from the dark days of BX.", "HUMBLE", OFF, BOOL_TYPE, NULL },
179
{ "Xwindows Window create","Xwindows/screen can /window create to create a new \"screen\"", "WINDOW_CREATE", ON, BOOL_TYPE, NULL},
180
{ "Flow Control", "Leave this enabled, unless you know it's needed","USE_FLOW_CONTROL", ON, BOOL_TYPE, NULL},
181
{ "Allow Ctrl-Z", "Does Ctrl-Z background BX.", "ALLOW_STOP_IRC", ON, BOOL_TYPE, NULL},
182
{ "Only Std Chars", "Use only standard chars instead of ibmpc charset", "ONLY_STD_CHARS", OFF, BOOL_TYPE, NULL},
183
{ "Latin1 Char Set", "Use only the latin1 charset.", "LATIN1", OFF, BOOL_TYPE, NULL},
184
{ "Ascii Logos", "Use the alternate ASCII logos", "ASCII_LOGO", OFF, BOOL_TYPE, NULL},
185
{ "Reverse Color", "Reverse black and white colors for Xterms", "REVERSE_WHITE_BLACK", OFF, BOOL_TYPE, NULL},
186
{ "Emacs Keybinds", "If you have trouble with your keyboard, change this", "EMACS_KEYBINDS", OFF, BOOL_TYPE, NULL},
187
{ "Identd Faking", "Allow identd faking", "IDENT_FAKE", OFF, BOOL_TYPE, NULL},
188
{ "cidentd support", "Use cidentd .authlie for fake username", "CIDENTD", OFF, BOOL_TYPE, NULL},
189
{ "wdidentd support", "Use wdidentd for fake username. Do no enable both cidentd and this", "WDIDENT", OFF, BOOL_TYPE, NULL},
190
{ "Include glob support","File Globbing support","INCLUDE_GLOB_FUNCTION", ON, BOOL_TYPE, NULL},
191
{ "Exec Command", "Enable the /exec command", "EXEC_COMMAND", ON, BOOL_TYPE, NULL},
192
{ "Public Access Enabled","This disables the dangerous commands, making them unsable", "PUBLIC_ACCESS", OFF, BOOL_TYPE, NULL},
193
{ "Hebrew Language support", "Hebrew Language Support", "HEBREW", ON, BOOL_TYPE, NULL},
194
{ "Translation Tables", "Keyboard Translation tables", "TRANSLATE", ON, BOOL_TYPE, NULL},
195
{ "Mirc resume support"," Support Mirc\'s Broken resume","MIRC_BROKEN_DCC_RESUME", ON, BOOL_TYPE, NULL},
196
{ "Mode Compression", "Code for performing mode compression on mass mode changes", "COMPRESS_MODES", ON, BOOL_TYPE, NULL},
197
{ "MAX # of urls in list", "Max Number of URLS to save in memory", "DEFAULT_MAX_URLS", 30, INT_TYPE, edit_dir },
198
{ "ChatNet Support", "Support chatnet\'s numeric 310", "WANT_CHATNET", OFF,BOOL_TYPE, NULL},
199
{ "Notify BitchX.com", "Notify BitchX.com of our version", "SHOULD_NOTIFY_BITCHX_COM", ON, BOOL_TYPE, NULL},
200
{ "Want Userlist", "", "WANT_USERLIST", ON, BOOL_TYPE, NULL },
201
{ NULL, NULL, NULL, 0, 0, NULL }
202
};
203
204
Configure userlist_default[] = {
205
{ "Userlist", "", "DEFAULT_USERLIST", ON, BOOL_TYPE, NULL },
206
{ "Auto-op", "", "DEFAULT_AOP_VAR", OFF, BOOL_TYPE, NULL },
207
{ "Auto Invite", "", "DEFAULT_AINV", 0, INT_TYPE, edit_dir },
208
{ "Kick ops", "", "DEFAULT_KICK_OPS", ON, BOOL_TYPE, NULL },
209
{ "Annoy Kick", "", "DEFAULT_ANNOY_KICK", OFF, BOOL_TYPE, NULL },
210
211
{ "Lamenick", "", "DEFAULT_LAMELIST", ON, BOOL_TYPE, NULL },
212
{ "Lame Ident", "", "DEFAULT_LAME_IDENT", OFF, BOOL_TYPE, NULL },
213
{ "Shitlist", "", "DEFAULT_SHITLIST", ON, BOOL_TYPE, NULL },
214
{ "Auto Rejoin Channel", "", "DEFAULT_AUTO_REJOIN", ON, BOOL_TYPE, NULL },
215
216
{ "Deop Flood", "", "DEFAULT_DEOPFLOOD", ON, BOOL_TYPE, NULL },
217
{ "Deop Flood Time", "", "DEFAULT_DEOPFLOOD_TIME", 30,INT_TYPE, edit_dir },
218
{ "Deop After \'X\' deops", "", "DEFAULT_DEOP_ON_DEOPFLOOD", 3,INT_TYPE, edit_dir },
219
{ "Deop After \'X\' kicks", "", "DEFAULT_DEOP_ON_KICKFLOOD", 3,INT_TYPE, edit_dir },
220
221
{ "Join Flood", "", "DEFAULT_JOINFLOOD", ON, BOOL_TYPE, NULL },
222
{ "Join Flood Time", "", "DEFAULT_JOINFLOOD_TIME", 50,INT_TYPE, edit_dir },
223
224
{ "Kick Flood", "", "DEFAULT_KICKFLOOD", ON, BOOL_TYPE, NULL },
225
{ "Kick Flood Time", "", "DEFAULT_KICKFLOOD_TIME", 30,INT_TYPE, edit_dir },
226
{ "Kick on \'X\' Kicks", "", "DEFAULT_KICK_ON_KICKFLOOD", 4,INT_TYPE, edit_dir },
227
{ "Kick on \'X\' Deops", "", "DEFAULT_KICK_ON_DEOPFLOOD", 3,INT_TYPE, edit_dir },
228
{ "Kick On \'X\' Joins", "", "DEFAULT_KICK_ON_JOINFLOOD", 4,INT_TYPE, edit_dir },
229
230
{ "Nick Flood", "", "DEFAULT_NICKFLOOD", ON, BOOL_TYPE, NULL },
231
{ "Nick Flood Time", "", "DEFAULT_NICKFLOOD_TIME", 30,INT_TYPE, edit_dir },
232
{ "Kick on \'X\' Nick Changes", "", "DEFAULT_KICK_ON_NICKFLOOD", 3,INT_TYPE, edit_dir },
233
234
{ "Public Flood", "", "DEFAULT_PUBFLOOD", OFF, BOOL_TYPE, NULL },
235
{ "Public Flood Time", "", "DEFAULT_PUBFLOOD_TIME", 20,INT_TYPE, edit_dir },
236
{ "Kick on Public flood", "", "DEFAULT_KICK_ON_PUBFLOOD", 30,INT_TYPE, edit_dir },
237
238
{ "Kick on ban match", "", "DEFAULT_KICK_IF_BANNED", OFF, BOOL_TYPE, NULL },
239
{ "Server op protection", "Values 0 for none, 1 for deop, 2 for announce only", "DEFAULT_HACKING", 0,INT_TYPE, edit_dir }, /* 0 1 2 */
240
{"Auto-Unban time", "", "DEFAULT_AUTO_UNBAN", 600, INT_TYPE, edit_dir },
241
{"Default Ban time", "", "DEFAULT_BANTIME", 600, INT_TYPE, edit_dir },
242
{"Send ctcp msg", "Send notice when ctcp command recieved", "DEFAULT_SEND_CTCP_MSG", ON, BOOL_TYPE, NULL },
243
{"Send Op msg", "Send notice when auto-op sent", "DEFAULT_SEND_OP_MSG", ON, BOOL_TYPE, NULL },
244
{ NULL, NULL, NULL, 0, 0, NULL }
245
};
246
247
Configure flood_default[] = {
248
{ "Flood Prot", "", "DEFAULT_FLOOD_PROTECTION", ON, BOOL_TYPE, NULL },
249
{ "Ctcp Flood Prot", "", "DEFAULT_CTCP_FLOOD_PROTECTION", ON, BOOL_TYPE, NULL },
250
{ "Ctcp Flood after", "", "DEFAULT_CTCP_FLOOD_AFTER", 10, INT_TYPE, edit_dir },
251
{ "Ctcp Flood rate", "", "DEFAULT_CTCP_FLOOD_RATE", 3, INT_TYPE, edit_dir},
252
{ "Flood Kick", "", "DEFAULT_FLOOD_KICK", ON, BOOL_TYPE, NULL },
253
{ "Flood Rate", "", "DEFAULT_FLOOD_RATE", 5, INT_TYPE, edit_dir },
254
{ "Flood After", "", "DEFAULT_FLOOD_AFTER", 4, INT_TYPE, edit_dir },
255
{ "Flood Users", "", "DEFAULT_FLOOD_USERS", 10, INT_TYPE, edit_dir },
256
{ "Flood Warning", "", "DEFAULT_FLOOD_WARNING", OFF, BOOL_TYPE, NULL },
257
{ "No CTCP flood", "", "DEFAULT_NO_CTCP_FLOOD", ON, BOOL_TYPE, NULL },
258
{ "CDCC flood after", "", "DEFAULT_CDCC_FLOOD_AFTER", 3, INT_TYPE, edit_dir },
259
{ "CDCC flood rate", "", "DEFAULT_CDCC_FLOOD_RATE", 4, INT_TYPE, edit_dir },
260
{ "CTCP delay", "", "DEFAULT_CTCP_DELAY", 3, INT_TYPE, edit_dir },
261
{ "CTCP flood ban", "", "DEFAULT_CTCP_FLOOD_BAN", ON, BOOL_TYPE, NULL },
262
{ "CTCP verbose", "", "DEFAULT_VERBOSE_CTCP", ON, BOOL_TYPE, NULL },
263
{ "CDCC on/off", "", "DEFAULT_CDCC", ON, BOOL_TYPE, NULL },
264
{"Ignore time on flood","", "DEFAULT_IGNORE_TIME", 600, INT_TYPE, edit_dir },
265
{ NULL, NULL, NULL, 0, 0, NULL }
266
};
267
268
Configure dcc_default[] = {
269
{ "DCC Fast", "Enable DCC fast support on supported hosts.", "DEFAULT_DCC_FAST", ON, BOOL_TYPE, NULL},
270
{ "DCC block size", "", "DEFAULT_DCC_BLOCK_SIZE", 2048, INT_TYPE, edit_dir},
271
{ "DCC auto-rename", "", "DEFAULT_DCC_AUTORENAME", ON, BOOL_TYPE, NULL},
272
{ "DCC auto-resume", "", "DEFAULT_DCC_AUTORESUME", OFF, BOOL_TYPE, NULL},
273
{ "DCC display bar", " 0 for color bargraph, 1 for non-color bar", "DEFAULT_DCC_BAR_TYPE", 0, INT_TYPE, edit_dir },
274
{ "DCC Autoget", "", "DEFAULT_DCC_AUTOGET", OFF, BOOL_TYPE, NULL},
275
{ "DCC Max DCC gets", "", "DEFAULT_DCC_GET_LIMIT", 0, INT_TYPE, edit_dir},
276
{ "DCC Max DCC sends", "", "DEFAULT_DCC_SEND_LIMIT", 5, INT_TYPE, edit_dir},
277
{ "DCC Queue Limit", "", "DEFAULT_DCC_QUEUE_LIMIT", 10, INT_TYPE, edit_dir},
278
{ "DCC Limit get/send", "", "DEFAULT_DCC_LIMIT", 10, INT_TYPE, edit_dir },
279
{ "DCC Idle dcc timeout", "", "DEFAULT_DCCTIMEOUT", 600, INT_TYPE, edit_dir },
280
{ "CDCC Queue timeout", "", "DEFAULT_QUEUE_SENDS", 0, INT_TYPE, edit_dir },
281
{ "DCC MAX dcc filesize get", "", "DEFAULT_MAX_AUTOGET_SIZE", 2000000, INT_TYPE, edit_dir },
282
{ NULL, NULL, NULL, 0, 0, NULL }
283
};
284
285
Configure server_default[] = {
286
{"Auto-Away system on/off", "", "DEFAULT_AUTO_AWAY", ON, BOOL_TYPE, NULL },
287
{"Send Away to Channel", "", "DEFAULT_SEND_AWAY_MSG", OFF, BOOL_TYPE, NULL },
288
{"# of seconds for auto-away", "", "DEFAULT_AUTO_AWAY_TIME", 600, INT_TYPE, edit_dir },
289
{"auto-unmark away", "", "DEFAULT_AUTO_UNMARK_AWAY", OFF, BOOL_TYPE, NULL },
290
{"Channel Name width", "", "DEFAULT_CHANNEL_NAME_WIDTH", 10, INT_TYPE, NULL },
291
{"Socks Port default", "", "DEFAULT_SOCKS_PORT", 1080, INT_TYPE, edit_dir },
292
{"Turn Notify on/off", "", "DEFAULT_NOTIFY", ON, BOOL_TYPE, NULL},
293
{"Max # of server reconnects", "", "DEFAULT_MAX_SERVER_RECONNECT", 2, INT_TYPE, edit_dir },
294
{"# of Seconds for connect", "", "DEFAULT_CONNECT_TIMEOUT", 30, INT_TYPE, edit_dir },
295
{"Send unknown commands", "", "DEFAULT_DISPATCH_UNKNOWN_COMMANDS", OFF, BOOL_TYPE, NULL},
296
{"Ignore Server write errors", "", "DEFAULT_NO_FAIL_DISCONNECT", OFF, BOOL_TYPE, NULL},
297
{"Enable Server groups", "", "DEFAULT_SERVER_GROUPS", OFF, BOOL_TYPE, NULL},
298
{"Kill window on part OS/2", "", "DEFAULT_WINDOW_DESTROY_PART", OFF, BOOL_TYPE, NULL},
299
{"Display server MOTD", "", "DEFAULT_SUPPRESS_SERVER_MOTD", ON, BOOL_TYPE, NULL},
300
{"Reconnect on kill", "", "DEFAULT_AUTO_RECONNECT", ON, BOOL_TYPE, NULL},
301
{"Show away once", "", "DEFAULT_SHOW_AWAY_ONCE", ON, BOOL_TYPE, NULL},
302
{"Show Nicks on channel join", "", "DEFAULT_SHOW_CHANNEL_NAMES", ON, BOOL_TYPE, NULL},
303
{"Show end of server msgs", "", "DEFAULT_SHOW_END_OF_MSGS", OFF, BOOL_TYPE, NULL},
304
{"Display Numerics", "", "DEFAULT_SHOW_NUMERICS", OFF, BOOL_TYPE, NULL},
305
{"Show ALL status vars", "", "DEFAULT_SHOW_STATUS_ALL", OFF, BOOL_TYPE, NULL},
306
{"Show who hop count", "", "DEFAULT_SHOW_WHO_HOPCOUNT", OFF, BOOL_TYPE, NULL},
307
{"Send ignore msg on ignore", "", "DEFAULT_SEND_IGNORE_MSG", OFF, BOOL_TYPE, NULL},
308
{"Hide Private channels", "", "DEFAULT_HIDE_PRIVATE_CHANNELS", OFF, BOOL_TYPE, NULL},
309
{"Default IRC server port", "", "IRC_PORT", 6667, INT_TYPE, edit_dir },
310
{"After # of second turn on", "", "DEFAULT_CPU_SAVER_AFTER", 0, INT_TYPE, edit_dir },
311
{"Every # of seconds allow", "", "DEFAULT_CPU_SAVER_EVERY", 0, INT_TYPE, edit_dir },
312
{ NULL, NULL, NULL, 0, 0, NULL }
313
};
314
315
Configure various_default[] = {
316
{"Ping type", "0 1 2", "DEFAULT_PING_TYPE", 1, INT_TYPE, edit_dir },
317
{"Cloak", "Which ctcp\'s do we respond too. 0 all. 1. ping 2. none", "DEFAULT_CLOAK", 1, INT_TYPE, NULL },
318
{"Msg Logging while away", "", "DEFAULT_MSGLOG", ON, BOOL_TYPE, NULL},
319
{"Auto-nslookup", "", "DEFAULT_AUTO_NSLOOKUP", OFF, BOOL_TYPE, NULL},
320
{"LinkLook on/off", "", "DEFAULT_LLOOK", OFF, BOOL_TYPE, NULL},
321
{"LinkLook Delay", "", "DEFAULT_LLOOK_DELAY", 120, INT_TYPE, edit_dir },
322
{"Split biggest window", "", "DEFAULT_ALWAYS_SPLIT_BIGGEST", ON, BOOL_TYPE, NULL},
323
{"Auto whowas", "", "DEFAULT_AUTO_WHOWAS", OFF, BOOL_TYPE, NULL},
324
{"Command Mode", "", "DEFAULT_COMMAND_MODE", OFF, BOOL_TYPE, NULL},
325
{"Comment Hack for /*", "", "DEFAULT_COMMENT_HACK", ON, BOOL_TYPE, NULL},
326
{"Display on/off", "", "DEFAULT_DISPLAY", ON, BOOL_TYPE, NULL},
327
{"8-bit chars", "", "DEFAULT_EIGHT_BIT_CHARACTERS", ON, BOOL_TYPE, NULL},
328
{"Enable exec protection", "", "DEFAULT_EXEC_PROTECTION", ON, BOOL_TYPE, NULL},
329
{"Escape chars > 127", "", "DEFAULT_HIGH_BIT_ESCAPE", OFF, BOOL_TYPE, NULL},
330
{"History", "", "DEFAULT_HISTORY", 100, INT_TYPE, edit_dir },
331
{"Screen paging", "", "DEFAULT_HOLD_MODE", OFF, BOOL_TYPE, NULL},
332
{"Max lines to hold", "", "DEFAULT_HOLD_MODE_MAX", 0, INT_TYPE, edit_dir },
333
334
{"Lastlog items", "", "DEFAULT_LASTLOG", 1000, INT_TYPE, edit_dir },
335
{"Logging on/off", "", "DEFAULT_LOG", OFF, BOOL_TYPE, NULL},
336
{"Enable Mail Check", " 0 1 2", "DEFAULT_MAIL", 2, INT_TYPE, edit_dir },
337
{"Notify on Terminate", "", "DEFAULT_NOTIFY_ON_TERMINATION", OFF, BOOL_TYPE, NULL},
338
{"Scroll Enabled", "", "DEFAULT_SCROLL_LINES", ON, BOOL_TYPE, NULL},
339
{"Process limit", "", "DEFAULT_SHELL_LIMIT", 0, INT_TYPE, edit_dir },
340
{"Number of Key Meta\'s", "", "DEFAULT_META_STATES", 5, INT_TYPE, edit_dir },
341
342
{"Max Deops", "", "DEFAULT_MAX_DEOPS", 2, INT_TYPE, edit_dir },
343
{"Max Idle check kicks", "", "DEFAULT_MAX_IDLEKICKS", 2, INT_TYPE, edit_dir },
344
{"Max Number bans", "", "DEFAULT_NUM_BANMODES", 4, INT_TYPE, edit_dir },
345
{"Num of kicks", "", "DEFAULT_NUM_KICKS", 4, INT_TYPE, edit_dir },
346
{"Num of Whowas", "", "DEFAULT_NUM_OF_WHOWAS", 4, INT_TYPE, edit_dir },
347
{"Num of OPmodes", "", "DEFAULT_NUM_OPMODES", 4, INT_TYPE, edit_dir },
348
349
{"Enable Help Pager", "", "DEFAULT_HELP_PAGER", ON, BOOL_TYPE, NULL},
350
{"Enable Help Prompt", "", "DEFAULT_HELP_PROMPT", ON, BOOL_TYPE, NULL},
351
{"Enable Help Window", "", "DEFAULT_HELP_WINDOW", OFF, BOOL_TYPE, NULL},
352
353
{"FTP address grab", "", "DEFAULT_FTP_GRAB", OFF, BOOL_TYPE, NULL},
354
{"HTTP address grab", "", "DEFAULT_HTTP_GRAB", OFF, BOOL_TYPE, NULL},
355
356
{"Nick Completion on/off", "", "DEFAULT_NICK_COMPLETION", ON, BOOL_TYPE, NULL},
357
{"Len of nick for complete", "", "DEFAULT_NICK_COMPLETION_LEN", 2, INT_TYPE, edit_dir },
358
{"Nick complete type", " 0 1 2", "DEFAULT_NICK_COMPLETION_TYPE", 0, INT_TYPE, edit_dir },
359
360
{"Full Status bar", "", "DEFAULT_FULL_STATUS_LINE", ON, BOOL_TYPE, NULL},
361
{"Allow %> to repeat", "", "DEFAULT_STATUS_NO_REPEAT", ON, BOOL_TYPE, NULL},
362
{"Double Status line", "", "DEFAULT_DOUBLE_STATUS_LINE", ON, BOOL_TYPE, NULL},
363
{"Expand $ vars in status", "", "DEFAULT_STATUS_DOES_EXPANDOS", OFF, BOOL_TYPE, NULL},
364
365
366
{"Operview window hide", "", "DEFAULT_OPERVIEW_HIDE", 0, INT_TYPE, edit_dir },
367
{"Operview on/off", "", "DEFAULT_OPER_VIEW", OFF, BOOL_TYPE, NULL},
368
369
{"Enable tabs", "", "DEFAULT_TAB", ON, BOOL_TYPE, NULL},
370
{"# of Chars to a tab", "", "DEFAULT_TAB_MAX", 8, INT_TYPE, edit_dir },
371
{"Beep on/off", "", "DEFAULT_BEEP", ON, BOOL_TYPE, NULL},
372
{"Beep MAX", "", "DEFAULT_BEEP_MAX", 3, INT_TYPE, edit_dir },
373
{"Beep when away", "", "DEFAULT_BEEP_WHEN_AWAY", OFF, BOOL_TYPE, NULL},
374
{"Enable Bold video", "", "DEFAULT_BOLD_VIDEO", ON, BOOL_TYPE, NULL},
375
{"Enable Blink video", "", "DEFAULT_BLINK_VIDEO", ON, BOOL_TYPE, NULL},
376
{"Enable Inverse video", "", "DEFAULT_INVERSE_VIDEO", ON, BOOL_TYPE, NULL},
377
{"Enable Underline video", "", "DEFAULT_UNDERLINE_VIDEO", ON, BOOL_TYPE, NULL},
378
{"Clock display on/off", "", "DEFAULT_CLOCK", ON, BOOL_TYPE, NULL},
379
{"24-Hour Clock display", "", "DEFAULT_CLOCK_24HOUR", OFF, BOOL_TYPE, NULL},
380
{"Floating point math", "", "DEFAULT_FLOATING_POINT_MATH", OFF, BOOL_TYPE, NULL},
381
{"Indent on/off", "", "DEFAULT_INDENT", ON, BOOL_TYPE, NULL},
382
{"Enable Input aliases", "", "DEFAULT_INPUT_ALIASES", OFF, BOOL_TYPE, NULL},
383
{"Enable insert mode", "", "DEFAULT_INSERT_MODE", ON, BOOL_TYPE, NULL},
384
385
{"Display Ansi on/off", "", "DEFAULT_DISPLAY_ANSI", ON, BOOL_TYPE, NULL},
386
{"Display char Mangling", "", "DEFAULT_DISPLAY_PC_CHARACTERS", 4, INT_TYPE, edit_dir },
387
388
{"# of Scrollback lines", "", "DEFAULT_SCROLLBACK_LINES", 512, INT_TYPE, edit_dir },
389
{"Scrollback ratio", "", "DEFAULT_SCROLLBACK_RATIO", 50, INT_TYPE, edit_dir },
390
{"MAX ND space", "", "DEFAULT_ND_SPACE_MAX", 160, INT_TYPE, edit_dir },
391
{"TabKey", "", "WANT_TABKEY", ON, BOOL_TYPE, NULL },
392
{"NSlookup", "", "WANT_NSLOOKUP", ON, BOOL_TYPE, NULL },
393
{"Bhelp command", "", "WANT_CHELP", ON, BOOL_TYPE, NULL },
394
{"TimeStamp", "", "DEFAULT_TIMESTAMP", OFF, BOOL_TYPE, NULL },
395
{ "Default Alt Charset","Use the default ALT charset", "DEFAULT_ALT_CHARSET", ON, BOOL_TYPE, NULL},
396
{ NULL, NULL, NULL, 0, 0, NULL }
397
};
398
399
400
401
402
/* Mark file and operated on special chars */
403
int mark_char = '*'; /* '*'; 0x10;*/
404
int old_mark_char = '-'; /*= 0xfe;*/
405
406
407
408
409
410
int changed = 0;
411
412
413
/* Current path and filename storage areas */
414
char current_path[MAXPATH + 1];
415
char current_filename[MAXPATH + 1];
416
417
#define COLOR_MAIN 1
418
#define COLOR_DIALOG 2
419
#define COLOR_STATUS 3
420
#define COLOR_HELP 4
421
#define COLOR_DIRECTORY 5
422
#define COLOR_ONVOL 6
423
#define COLOR_SELECTED 7
424
#define COLOR_BOTTOM 8
425
#define COLOR_TITLE 9
426
char main_foreground = COLOR_WHITE, main_background = COLOR_BLUE,
427
dialog_foreground, dialog_background;
428
char status_foreground, status_background,
429
help_foreground, help_background;
430
char directory_foreground, directory_background,
431
onvol_foreground, onvol_background;
432
char selected_foreground = COLOR_BLUE, selected_background = COLOR_WHITE,
433
bottom_foreground, bottom_background;
434
char title_foreground, title_background;
435
436
437
#include "save.c"
438
#include "load.c"
439
440
int load_dir(CELL *c)
441
{
442
load_file(current_path);
443
return TRUE;
444
}
445
446
447
448
449
int exit_program (CELL *c)
450
{
451
changed = 0;
452
c->termkey = ALT_X;
453
return TRUE;
454
}
455
456
457
458
void setup_colors()
459
{
460
/* Sets up color */
461
462
if (has_colors())
463
{
464
init_pair(COLOR_MAIN, main_foreground, main_background);
465
init_pair(COLOR_DIALOG, dialog_foreground, dialog_background);
466
init_pair(COLOR_STATUS, status_foreground, status_background);
467
init_pair(COLOR_HELP, help_foreground, help_background);
468
init_pair(COLOR_DIRECTORY, directory_foreground, directory_background);
469
init_pair(COLOR_ONVOL, onvol_foreground, onvol_background);
470
init_pair(COLOR_SELECTED, selected_foreground, selected_background);
471
init_pair(COLOR_BOTTOM, bottom_foreground, bottom_background);
472
init_pair(COLOR_TITLE, title_foreground, title_background);
473
}
474
}
475
476
477
/* Initialize the linked list to NULL */
478
void init_dlist ( CELL *c )
479
{
480
c->start = c->end = c->list_start = c->list_end = c->current = NULL;
481
}
482
483
int toggle_select (CELL *c)
484
{
485
if (c->current->datainfo.type == BOOL_TYPE)
486
{
487
if (c->current->datainfo.integer)
488
c->current->datainfo.integer = 0;
489
else
490
c->current->datainfo.integer = 1;
491
c->redraw = TRUE;
492
return TRUE;
493
}
494
if (c->current->datainfo.func)
495
return (*c->current->datainfo.func) (c);
496
return TRUE;
497
}
498
499
/* Add mark to current highlighted item */
500
int plus_it(CELL *c)
501
{
502
503
if (c->current->datainfo.type == INT_TYPE)
504
{
505
c->current->datainfo.integer++;
506
c->redraw = TRUE;
507
}
508
return TRUE;
509
}
510
511
/* Take away mark from current highlighted item */
512
int minus_it(CELL *c) {
513
if (c->current->datainfo.type == INT_TYPE && c->current->datainfo.integer)
514
{
515
c->current->datainfo.integer--;
516
c->redraw = TRUE;
517
}
518
return TRUE;
519
}
520
521
522
int update_select(CELL *c)
523
{
524
if (c->current->datainfo.func)
525
return (*c->current->datainfo.func) (c);
526
return TRUE;
527
}
528
529
530
/* clear list of files to play.. Make sure user wants this behavior */
531
int clear_marks(CELL *c)
532
{
533
dlistptr ptr;
534
ptr = c->start;
535
while (ptr)
536
{
537
ptr->datainfo.mark = 0;
538
ptr = ptr->nextlistptr;
539
}
540
c->redraw = TRUE;
541
return TRUE;
542
}
543
544
/* cleate all parts ot the the linked list */
545
546
int clear_dlist (CELL *c)
547
{
548
dlistptr ptr;
549
while (c->start != NULL ) {
550
ptr = c->start;
551
c->start = c->start->nextlistptr;
552
if (ptr->datainfo.option)
553
free(ptr->datainfo.option);
554
if (ptr->datainfo.help)
555
free(ptr->datainfo.help);
556
free(ptr);
557
}
558
c->end = NULL;
559
return TRUE;
560
}
561
562
int List_Exit(CELL *c) {
563
clear_dlist(c);
564
return TRUE;
565
}
566
567
568
/*
569
* Update status information including number of files, number of marked files
570
* etc.
571
*/
572
int status_update(CELL *c) {
573
char tmp[(200 + 1) * 2];
574
int center;
575
center = ((c->ecol - 2) / 2) - (strlen(c->filename) / 2);
576
memset(tmp, 0, sizeof(tmp));
577
#if 0
578
memset(tmp, ' ', center);
579
strcat(tmp, c->filename);
580
mvwaddstr(c->window, c->srow - 2, c->scol , tmp);
581
#else
582
memset(tmp, ' ', c->ecol - 2);
583
mvwaddstr (c->window, c->srow - 2 , c->scol, tmp);
584
wattron(c->window,A_REVERSE);
585
mvwaddstr (c->window, c->srow - 2 , center, c->filename);
586
wattroff(c->window,A_REVERSE);
587
588
#endif
589
if (c->current->datainfo.help)
590
{
591
sprintf(tmp, " %-75s ", c->current->datainfo.help);
592
mvwaddstr(c->window, c->max_rows - 3, c->scol, tmp);
593
}
594
else
595
mvwaddstr(c->window, c->max_rows - 2, c->scol, tmp);
596
return TRUE;
597
}
598
599
/* Insert an item into the list. IN this case a filename and it's current
600
* attribute's are stored in the list. Item is added to the end of the list.
601
* and pointers are updated.
602
*/
603
int insert_fdlist (CELL *c, struct _config_type *current) {
604
dlistptr ptr = NULL;
605
606
ptr = (dlistptr) calloc(1, sizeof(struct dlistmem));
607
if (c->start == NULL) /* start of new list */
608
c->start = ptr;
609
else
610
{
611
ptr->prevlistptr = c->end;
612
c->end->nextlistptr = ptr;
613
}
614
c->end = ptr;
615
616
ptr->datainfo.option = (char *) malloc(strlen(current->option)+1);
617
strcpy(ptr->datainfo.option, current->option);
618
ptr->datainfo.help = (char *) malloc(strlen(current->help)+1);
619
strcpy(ptr->datainfo.help, current->help);
620
ptr->datainfo.func = current->func;
621
ptr->datainfo.integer = current->integer;
622
ptr->datainfo.type = current->type;
623
return TRUE;
624
625
}
626
627
/* on entry to file list routine, setup screen windows and put menu options
628
* on screen.
629
* initilize the list.
630
* Use findfirst/findnext to add filenames into list
631
* Set display begin/end to start of list.
632
* finally sort the list
633
*/
634
635
int File_Entry(CELL *c) {
636
wmove(c->window,c->srow - 2, c->scol - 1);
637
wborder(c->window,0,0,0,0,0,0,0,0);
638
639
mvwaddch(c->window, c->srow - 1, c->max_cols, ACS_RTEE);
640
mvwaddch(c->window, c->srow - 1, c->scol - 1, ACS_LTEE);
641
wmove(c->window,c->srow - 1, c->scol);
642
whline(c->window, ACS_HLINE, c->max_cols - c->scol);
643
644
mvwaddch(c->window, c->erow + 1, c->scol - 1, ACS_LTEE);
645
mvwaddch(c->window, c->erow + 1, c->max_cols, ACS_RTEE);
646
wmove(c->window,c->erow + 1, c->scol);
647
whline(c->window, ACS_HLINE, c->max_cols - c->scol);
648
649
wrefresh(c->window);
650
c->current = c->list_start = c->list_end = c->start;
651
return TRUE;
652
}
653
654
/*
655
* screen Display function, formats file info into displayable format
656
* Uses some magic numbers for masking information.
657
*/
658
char *fDisplay (dlistptr *ptr)
659
{
660
static char p[100];
661
sprintf(p, " %-36s ", (*ptr)->datainfo.option);
662
return p;
663
}
664
665
/*
666
* File redraw routine. Draws current list on screen.
667
*/
668
int fredraw (CELL * c)
669
{
670
register int row = c->srow;
671
dlistptr p = c->list_start;
672
int i = 0;
673
char buff[200];
674
if (c->ecol - c->scol)
675
sprintf(buff, "%*s",c->ecol - c->scol + 1, " ");
676
while (i <= c->erow - c->srow && p != NULL)
677
{
678
if (p == c->current) wattron(c->window,A_REVERSE);
679
mvaddstr (row , c->scol, fDisplay(&p));
680
if (p == c->current) wattroff(c->window,A_REVERSE);
681
row++; i++;
682
p = p->nextlistptr;
683
}
684
if (row <= c -> erow)
685
for (; row <= c -> erow ; row++)
686
mvaddstr(row, c->scol, buff);
687
wrefresh(c->window);
688
c -> redraw = FALSE;
689
return TRUE;
690
}
691
692
693
char *cDisplay (dlistptr *ptr)
694
{
695
static char p[100];
696
if ((*ptr)->datainfo.type == BOOL_TYPE)
697
sprintf(p, " %-28s %8s", (*ptr)->datainfo.option, (*ptr)->datainfo.integer? "On":"Off");
698
else if ((*ptr)->datainfo.type == INT_TYPE)
699
sprintf(p, " %-28s %8d", (*ptr)->datainfo.option, (*ptr)->datainfo.integer);
700
return p;
701
}
702
703
/*
704
* File redraw routine. Draws current list on screen.
705
*/
706
int credraw (CELL * c)
707
{
708
register int row = c->srow;
709
dlistptr p = c->list_start;
710
int i = 0;
711
char buff[200];
712
if (c->ecol - c->scol)
713
sprintf(buff, "%*s",c->ecol - c->scol + 1, " ");
714
715
while (i <= c->erow - c->srow && p != NULL)
716
{
717
if (p == c->current) wattron(c->window,A_REVERSE);
718
mvaddstr (row , c->scol, cDisplay(&p));
719
if (p == c->current) wattroff(c->window,A_REVERSE);
720
row++; i++;
721
p = p->nextlistptr;
722
}
723
if (row <= c -> erow)
724
for (; row <= c -> erow ; row++)
725
mvaddstr(row, c->scol, buff);
726
wrefresh(c->window);
727
c -> redraw = FALSE;
728
return TRUE;
729
}
730
731
/*
732
* Basically setup values for where the box is to appear.
733
* setup function pointers to default.
734
* save the screen.
735
* loop
736
* execute dispatch key routine
737
* until ESC or E or termkey is not equal to 0
738
* retore screen
739
* and return to caller
740
* true indicates that the function was successful in executing whatever
741
* it was supposed to do.
742
*/
743
/* In this case also
744
* setup the old drive and path information,
745
* set the current path to Quote Master export directory and
746
* filename to worksheet extension
747
*/
748
int main_dir(CELL *c) {
749
int i;
750
751
getcwd(current_path, sizeof(current_path));
752
strcat(current_path, "/.config.h");
753
load_file(current_path);
754
755
c->keytable = file_cpy_menu;
756
c->func_table = file_cpy_table;
757
c->ListEntryProc = File_Entry;
758
c->UpdateStatusProc = status_update;
759
c->redraw = TRUE;
760
c->ListExitProc = List_Exit;
761
c->ListPaintProc = fredraw;
762
763
c->srow = 3;
764
c->scol = 1;
765
c->erow = c->window->_maxy - 5;
766
c->ecol = c->window->_maxx - 1;
767
c->max_rows = c->window->_maxy;
768
c->max_cols = c->window->_maxx;
769
770
c->filename = "[ BitchX Config ]";
771
c->menu_bar = 0;
772
c->normcolor = 0x07;
773
c->barcolor = 0x1f;
774
init_dlist(c);
775
for (i = 0; config_type[i].option; i++)
776
insert_fdlist(c, &config_type[i]);
777
778
779
/*
780
* Go Do It
781
*/
782
do {
783
c->redraw = TRUE;
784
ls_dispatch(c);
785
} while (c->termkey != ESC && c->termkey != ALT_X);
786
return TRUE;
787
}
788
789
int Compile_Exit(CELL *c) {
790
dlistptr ptr = c->start;
791
int i;
792
for (i = 0; ptr; ptr = ptr->nextlistptr, i++)
793
compile_default[i].integer = ptr->datainfo.integer;
794
clear_dlist(c);
795
return TRUE;
796
}
797
798
int compile_dir(CELL *c) {
799
CELL compile = { 0 };
800
int i;
801
compile.window = c->window;
802
compile.keytable = file_cpy_menu;
803
compile.func_table = compile_cpy_table;
804
compile.ListEntryProc = File_Entry;
805
compile.UpdateStatusProc = status_update;
806
compile.redraw = TRUE;
807
compile.ListExitProc = Compile_Exit;
808
compile.ListPaintProc = credraw;
809
810
compile.srow = 3;
811
compile.scol = 1;
812
compile.erow = compile.window->_maxy - 5;
813
compile.ecol = compile.window->_maxx - 1;
814
compile.max_rows = compile.window->_maxy;
815
compile.max_cols = compile.window->_maxx;
816
817
compile.filename = "[ BitchX Config ]";
818
compile.menu_bar = 0;
819
compile.normcolor = 0x07;
820
compile.barcolor = 0x1f;
821
init_dlist(&compile);
822
for (i = 0; compile_default[i].option; i++)
823
insert_fdlist(&compile, &compile_default[i]);
824
825
826
/*
827
* Go Do It
828
*/
829
do {
830
compile.redraw = TRUE;
831
ls_dispatch(&compile);
832
} while (compile.termkey != ESC && compile.termkey != ALT_X);
833
c->redraw = TRUE;
834
return TRUE;
835
}
836
837
int userlist_Exit (CELL *c)
838
{
839
int i;
840
dlistptr ptr = c->start;
841
for (i = 0; ptr; ptr = ptr->nextlistptr, i++)
842
userlist_default[i].integer = ptr->datainfo.integer;
843
clear_dlist(c);
844
return TRUE;
845
}
846
847
int userlist_dir(CELL *c) {
848
CELL compile = { 0 };
849
int i;
850
compile.window = c->window;
851
compile.keytable = file_cpy_menu;
852
compile.func_table = compile_cpy_table;
853
compile.ListEntryProc = File_Entry;
854
compile.UpdateStatusProc = status_update;
855
compile.redraw = TRUE;
856
compile.ListExitProc = userlist_Exit;
857
compile.ListPaintProc = credraw;
858
859
compile.srow = 3;
860
compile.scol = 1;
861
compile.erow = compile.window->_maxy - 5;
862
compile.ecol = compile.window->_maxx - 1;
863
compile.max_rows = compile.window->_maxy;
864
compile.max_cols = compile.window->_maxx;
865
866
compile.filename = "[ BitchX CSET/Userlist Config ]";
867
compile.menu_bar = 0;
868
compile.normcolor = 0x07;
869
compile.barcolor = 0x1f;
870
init_dlist(&compile);
871
for (i = 0; userlist_default[i].option; i++)
872
insert_fdlist(&compile, &userlist_default[i]);
873
874
875
/*
876
* Go Do It
877
*/
878
do {
879
compile.redraw = TRUE;
880
ls_dispatch(&compile);
881
} while (compile.termkey != ESC && compile.termkey != ALT_X);
882
c->redraw = TRUE;
883
return TRUE;
884
}
885
886
int flood_Exit (CELL *c)
887
{
888
int i;
889
dlistptr ptr = c->start;
890
for (i = 0; ptr; ptr = ptr->nextlistptr, i++)
891
flood_default[i].integer = ptr->datainfo.integer;
892
clear_dlist(c);
893
return TRUE;
894
}
895
896
int flood_dir(CELL *c) {
897
CELL compile = { 0 };
898
int i;
899
compile.window = c->window;
900
compile.keytable = file_cpy_menu;
901
compile.func_table = compile_cpy_table;
902
compile.ListEntryProc = File_Entry;
903
compile.UpdateStatusProc = status_update;
904
compile.redraw = TRUE;
905
compile.ListExitProc = flood_Exit;
906
compile.ListPaintProc = credraw;
907
908
compile.srow = 3;
909
compile.scol = 1;
910
compile.erow = compile.window->_maxy - 5;
911
compile.ecol = compile.window->_maxx - 1;
912
compile.max_rows = compile.window->_maxy;
913
compile.max_cols = compile.window->_maxx;
914
915
compile.filename = "[ BitchX Flood Config ]";
916
compile.menu_bar = 0;
917
compile.normcolor = 0x07;
918
compile.barcolor = 0x1f;
919
init_dlist(&compile);
920
for (i = 0; flood_default[i].option; i++)
921
insert_fdlist(&compile, &flood_default[i]);
922
923
924
/*
925
* Go Do It
926
*/
927
do {
928
compile.redraw = TRUE;
929
ls_dispatch(&compile);
930
} while (compile.termkey != ESC && compile.termkey != ALT_X);
931
932
c->redraw = TRUE;
933
return TRUE;
934
}
935
936
937
int dcc_Exit (CELL *c)
938
{
939
int i;
940
dlistptr ptr = c->start;
941
for (i = 0; ptr; ptr = ptr->nextlistptr, i++)
942
dcc_default[i].integer = ptr->datainfo.integer;
943
clear_dlist(c);
944
return TRUE;
945
}
946
947
int dcc_dir(CELL *c) {
948
CELL compile = { 0 };
949
int i;
950
compile.window = c->window;
951
compile.keytable = file_cpy_menu;
952
compile.func_table = compile_cpy_table;
953
compile.ListEntryProc = File_Entry;
954
compile.UpdateStatusProc = status_update;
955
compile.redraw = TRUE;
956
compile.ListExitProc = dcc_Exit;
957
compile.ListPaintProc = credraw;
958
959
compile.srow = 3;
960
compile.scol = 1;
961
compile.erow = compile.window->_maxy - 5;
962
compile.ecol = compile.window->_maxx - 1;
963
compile.max_rows = compile.window->_maxy;
964
compile.max_cols = compile.window->_maxx;
965
966
compile.filename = "[ BitchX DCC Config ]";
967
compile.menu_bar = 0;
968
compile.normcolor = 0x07;
969
compile.barcolor = 0x1f;
970
init_dlist(&compile);
971
for (i = 0; dcc_default[i].option; i++)
972
insert_fdlist(&compile, &dcc_default[i]);
973
974
975
/*
976
* Go Do It
977
*/
978
do {
979
compile.redraw = TRUE;
980
ls_dispatch(&compile);
981
} while (compile.termkey != ESC && compile.termkey != ALT_X);
982
983
c->redraw = TRUE;
984
return TRUE;
985
}
986
987
int server_Exit (CELL *c)
988
{
989
int i;
990
dlistptr ptr = c->start;
991
for (i = 0; ptr; ptr = ptr->nextlistptr, i++)
992
server_default[i].integer = ptr->datainfo.integer;
993
clear_dlist(c);
994
return TRUE;
995
}
996
997
int server_dir(CELL *c) {
998
CELL compile = { 0 };
999
int i;
1000
compile.window = c->window;
1001
compile.keytable = file_cpy_menu;
1002
compile.func_table = compile_cpy_table;
1003
compile.ListEntryProc = File_Entry;
1004
compile.UpdateStatusProc = status_update;
1005
compile.redraw = TRUE;
1006
compile.ListExitProc = server_Exit;
1007
compile.ListPaintProc = credraw;
1008
1009
compile.srow = 3;
1010
compile.scol = 1;
1011
compile.erow = compile.window->_maxy - 5;
1012
compile.ecol = compile.window->_maxx - 1;
1013
compile.max_rows = compile.window->_maxy;
1014
compile.max_cols = compile.window->_maxx;
1015
1016
compile.filename = "[ BitchX Server Config ]";
1017
compile.menu_bar = 0;
1018
compile.normcolor = 0x07;
1019
compile.barcolor = 0x1f;
1020
init_dlist(&compile);
1021
for (i = 0; server_default[i].option; i++)
1022
insert_fdlist(&compile, &server_default[i]);
1023
1024
1025
/*
1026
* Go Do It
1027
*/
1028
do {
1029
compile.redraw = TRUE;
1030
ls_dispatch(&compile);
1031
} while (compile.termkey != ESC && compile.termkey != ALT_X);
1032
1033
c->redraw = TRUE;
1034
return TRUE;
1035
}
1036
1037
int various_Exit (CELL *c)
1038
{
1039
int i;
1040
dlistptr ptr = c->start;
1041
for (i = 0; ptr; ptr = ptr->nextlistptr, i++)
1042
various_default[i].integer = ptr->datainfo.integer;
1043
clear_dlist(c);
1044
return TRUE;
1045
}
1046
1047
int various_dir(CELL *c) {
1048
CELL compile = { 0 };
1049
int i;
1050
compile.window = c->window;
1051
compile.keytable = file_cpy_menu;
1052
compile.func_table = compile_cpy_table;
1053
compile.ListEntryProc = File_Entry;
1054
compile.UpdateStatusProc = status_update;
1055
compile.redraw = TRUE;
1056
compile.ListExitProc = various_Exit;
1057
compile.ListPaintProc = credraw;
1058
1059
compile.srow = 3;
1060
compile.scol = 1;
1061
compile.erow = compile.window->_maxy - 5;
1062
compile.ecol = compile.window->_maxx - 1;
1063
compile.max_rows = compile.window->_maxy;
1064
compile.max_cols = compile.window->_maxx;
1065
1066
compile.filename = "[ BitchX Various Config ]";
1067
compile.menu_bar = 0;
1068
compile.normcolor = 0x07;
1069
compile.barcolor = 0x1f;
1070
init_dlist(&compile);
1071
for (i = 0; various_default[i].option; i++)
1072
insert_fdlist(&compile, &various_default[i]);
1073
1074
1075
/*
1076
* Go Do It
1077
*/
1078
do {
1079
compile.redraw = TRUE;
1080
ls_dispatch(&compile);
1081
} while (compile.termkey != ESC && compile.termkey != ALT_X);
1082
1083
c->redraw = TRUE;
1084
return TRUE;
1085
}
1086
1087
char *eDisplay (dlistptr *ptr)
1088
{
1089
static char p[100];
1090
char str[40];
1091
sprintf(str, "%d", (*ptr)->datainfo.integer);
1092
sprintf(p, "%14s", str);
1093
return p;
1094
}
1095
1096
/*
1097
* File redraw routine. Draws current list on screen.
1098
*/
1099
int eredraw (CELL * c)
1100
{
1101
register int row = c->srow;
1102
dlistptr p = c->list_start;
1103
int i = 0;
1104
char buff[200];
1105
1106
if (c->ecol - c->scol)
1107
sprintf(buff, "%*s",c->ecol - c->scol + 1, " ");
1108
1109
while (i <= c->erow - c->srow && p != NULL)
1110
{
1111
if (p == c->current) wattron(c->window,A_REVERSE);
1112
mvaddstr (row , c->scol+4, eDisplay(&p));
1113
if (p == c->current) wattroff(c->window,A_REVERSE);
1114
row++; i++;
1115
p = p->nextlistptr;
1116
}
1117
if (row <= c -> erow)
1118
for (; row <= c -> erow ; row++)
1119
mvaddstr(row, c->scol, buff);
1120
wrefresh(c->window);
1121
c -> redraw = FALSE;
1122
return TRUE;
1123
}
1124
1125
int Edit_Entry(CELL *c) {
1126
char tmp[180];
1127
memset(tmp, ' ', sizeof(tmp)-1);
1128
tmp[c->ecol - 2 - c->scol - 4] = 0;
1129
mvwaddstr (c->window, c->srow - 1 , c->scol, tmp);
1130
mvwaddstr (c->window, c->srow - 1, c->scol + 4, c->start->datainfo.option);
1131
wrefresh(c->window);
1132
c->current = c->list_start = c->list_end = c->start;
1133
return TRUE;
1134
}
1135
1136
int edit_enter (CELL *c)
1137
{
1138
char tmp[180];
1139
memset(tmp, ' ', sizeof(tmp)-1);
1140
tmp[c->ecol - 2 - c->scol - 4] = 0;
1141
if (c->current->datainfo.type == INT_TYPE)
1142
{
1143
c->redraw = TRUE;
1144
c->termkey = '\n';
1145
}
1146
mvwaddstr (c->window, c->srow , c->scol, tmp);
1147
return TRUE;
1148
}
1149
1150
int edit_line(CELL *c)
1151
{
1152
int found = 0;
1153
int end = 0;
1154
if (c->current->datainfo.type == INT_TYPE)
1155
found = INT_TYPE;
1156
else if (c->current->datainfo.type == STR_TYPE)
1157
found = STR_TYPE;
1158
if (!found || ((found == INT_TYPE) && !isdigit(c->key)) || ((found == STR_TYPE) && !isalpha(c->key)))
1159
if (!iscntrl(c->key))
1160
return TRUE;
1161
end = strlen(c->current->datainfo.save);
1162
switch(c->key)
1163
{
1164
case KEY_BACKSPACE:
1165
if (*c->current->datainfo.save)
1166
c->current->datainfo.save[end - 1] = 0;
1167
break;
1168
default:
1169
if (iscntrl(c->key))
1170
return TRUE;
1171
if (end < MAXLEN)
1172
c->current->datainfo.save[end] = c->key;
1173
else
1174
beep();
1175
}
1176
if (found == INT_TYPE)
1177
{
1178
unsigned long temp = 0;
1179
if (*c->current->datainfo.save)
1180
{
1181
temp = strtoul(c->current->datainfo.save, NULL, 10);
1182
if (temp < 2147483647)
1183
c->current->datainfo.integer = temp;
1184
else
1185
c->current->datainfo.save[end] = 0;
1186
}
1187
else
1188
c->current->datainfo.integer = 0;
1189
}
1190
c->redraw = TRUE;
1191
return TRUE;
1192
}
1193
1194
int edit_exit(CELL *c)
1195
{
1196
char tmp[180];
1197
memset(tmp, ' ', sizeof(tmp)-1);
1198
tmp[c->ecol - 2 - c->scol - 4] = 0;
1199
mvwaddstr (c->window, c->srow - 1 , c->scol, tmp);
1200
mvwaddstr (c->window, c->srow , c->scol, tmp);
1201
return TRUE;
1202
}
1203
1204
int edit_dir(CELL *c)
1205
{
1206
CELL edit = { 0 };
1207
dlistptr ptr = NULL;
1208
1209
edit.window = c->window;
1210
edit.keytable = file_cpy_menu;
1211
edit.func_table = edit_cpy_table;
1212
edit.ListEntryProc = Edit_Entry;
1213
edit.redraw = TRUE;
1214
edit.ListPaintProc = eredraw;
1215
edit.ListExitProc = edit_exit;
1216
1217
edit.current_event = edit_line;
1218
1219
edit.srow = edit.window->_maxy - 2;
1220
edit.scol = 1;
1221
edit.erow = edit.window->_maxy - 2;
1222
edit.ecol = edit.window->_maxx - 1;
1223
edit.max_rows = edit.window->_maxy;
1224
edit.max_cols = edit.window->_maxx;
1225
1226
edit.menu_bar = 0;
1227
edit.normcolor = 0x07;
1228
edit.barcolor = 0x1f;
1229
1230
ptr = (dlistptr) calloc(1, sizeof(struct dlistmem));
1231
edit.start = ptr;
1232
ptr->datainfo.option = (char *) malloc(strlen(c->current->datainfo.option)+1);
1233
strcpy(ptr->datainfo.option, c->current->datainfo.option);
1234
ptr->datainfo.integer = c->current->datainfo.integer;
1235
ptr->datainfo.type = c->current->datainfo.type;
1236
ptr->datainfo.save = (char *) malloc(MAXLEN+1);
1237
memset(ptr->datainfo.save, 0, MAXLEN);
1238
1239
/*
1240
* Go Do It
1241
*/
1242
do
1243
{
1244
edit.redraw = TRUE;
1245
ls_dispatch(&edit);
1246
} while (edit.termkey != ESC && edit.termkey != ALT_X && edit.termkey != '\n');
1247
c->redraw = TRUE;
1248
if (edit.termkey == '\n')
1249
c->current->datainfo.integer = edit.current->datainfo.integer;
1250
clear_dlist(&edit);
1251
return TRUE;
1252
}
1253
1254
int main() {
1255
CELL file_cpy = {0};
1256
WINDOW *mainwin;
1257
mainwin = initscr();
1258
start_color();
1259
setup_colors();
1260
cbreak();
1261
noecho();
1262
keypad(mainwin, TRUE);
1263
meta(mainwin, TRUE);
1264
raw();
1265
1266
leaveok(mainwin, TRUE);
1267
wbkgd(mainwin, COLOR_PAIR(COLOR_MAIN));
1268
wattron(mainwin, COLOR_PAIR(COLOR_MAIN));
1269
werase(mainwin);
1270
refresh();
1271
1272
file_cpy.window = mainwin;
1273
1274
main_dir(&file_cpy);
1275
1276
wbkgd(mainwin, A_NORMAL);
1277
werase(mainwin);
1278
echo();
1279
nocbreak();
1280
noraw();
1281
refresh();
1282
endwin();
1283
return TRUE;
1284
}
1285
1286