Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
BitchX
GitHub Repository: BitchX/BitchX1.3
Path: blob/master/source/fset.c
1069 views
1
#include "irc.h"
2
static char cvsrevision[] = "$Id: fset.c 144 2011-10-13 12:45:27Z keaston $";
3
CVS_REVISION(fset_c)
4
#include "struct.h"
5
6
#include "alist.h"
7
#include "ircaux.h"
8
#include "screen.h"
9
#include "hook.h"
10
#include "output.h"
11
#include "misc.h"
12
#include "list.h"
13
#include "vars.h"
14
#define MAIN_SOURCE
15
#include "modval.h"
16
17
extern void reinit_status (Window *, char *, int);
18
19
typedef struct _fset_number_ {
20
struct _fset_number_ *next;
21
int numeric;
22
char *format;
23
} FsetNumber;
24
25
static FsetNumber *numeric_fset = NULL;
26
27
IrcVariable fset_array[] =
28
{
29
{ "ACTION", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
30
{ "ACTION_AR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
31
{ "ACTION_CHANNEL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
32
{ "ACTION_OTHER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
33
{ "ACTION_OTHER_AR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
34
{ "ACTION_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
35
{ "ACTION_USER_AR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
36
{ "ALIAS", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
37
{ "ASSIGN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
38
{ "AWAY", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
39
{ "BACK", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
40
{ "BANS", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
41
{ "BANS_FOOTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
42
{ "BANS_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
43
{ "BITCH", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
44
{ "BOT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
45
{ "BOT_FOOTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
46
{ "BOT_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
47
{ "BWALL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
48
49
{ "CHANNEL_SIGNOFF", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
50
{ "CHANNEL_URL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
51
52
{ "COMPLETE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
53
{ "CONNECT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
54
{ "CSET", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
55
{ "CTCP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
56
{ "CTCP_CLOAK", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
57
{ "CTCP_CLOAK_FUNC", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
58
{ "CTCP_CLOAK_FUNC_USER",0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
59
{ "CTCP_CLOAK_UNKNOWN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
60
{ "CTCP_CLOAK_UNKNOWN_USER", 0,STR_TYPE_VAR,0,NULL, NULL, 0, 0},
61
{ "CTCP_CLOAK_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
62
{ "CTCP_FUNC", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
63
{ "CTCP_FUNC_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
64
{ "CTCP_REPLY", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
65
{ "CTCP_UNKNOWN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
66
{ "CTCP_UNKNOWN_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
67
{ "CTCP_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
68
{ "DCC", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
69
{ "DCC_CHAT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
70
{ "DCC_CONNECT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
71
{ "DCC_ERROR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
72
{ "DCC_LOST", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
73
{ "DCC_REQUEST", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
74
{ "DESYNC", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
75
76
{ "DISCONNECT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
77
{ "EBANS", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
78
{ "EBANS_FOOTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
79
{ "EBANS_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
80
{ "ENCRYPTED_NOTICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
81
{ "ENCRYPTED_PRIVMSG", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
82
{ "FLOOD", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
83
{ "FRIEND_JOIN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
84
{ "HELP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
85
{ "HOOK", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
86
87
{ "IGNORE_INVITE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
88
{ "IGNORE_MSG", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
89
{ "IGNORE_MSG_AWAY", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
90
{ "IGNORE_NOTICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
91
{ "IGNORE_WALL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
92
93
{ "INVITE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
94
{ "INVITE_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
95
{ "JOIN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
96
{ "KICK", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
97
{ "KICK_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
98
{ "KILL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
99
{ "LASTLOG", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
100
{ "LEAVE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
101
{ "LINKS", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
102
{ "LIST", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
103
{ "MAIL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
104
{ "MODE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
105
{ "MODE_CHANNEL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
106
{ "MSG", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
107
{ "MSGCOUNT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
108
{ "MSGLOG", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
109
{ "MSG_GROUP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
110
{ "NAMES", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
111
{ "NAMES_BANNER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
112
{ "NAMES_BOT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
113
{ "NAMES_FOOTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
114
{ "NAMES_FRIEND", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
115
{ "NAMES_IRCOP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
116
{ "NAMES_NICK", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
117
{ "NAMES_NICK_BOT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
118
{ "NAMES_NICK_FRIEND", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
119
{ "NAMES_NICK_ME", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
120
{ "NAMES_NICK_SHIT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
121
{ "NAMES_NONOP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
122
{ "NAMES_OP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
123
{ "NAMES_SHIT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
124
{ "NAMES_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
125
{ "NAMES_USER_CHANOP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
126
{ "NAMES_USER_IRCOP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
127
{ "NAMES_USER_VOICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
128
{ "NAMES_VOICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
129
130
{ "NETADD", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
131
{ "NETJOIN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
132
{ "NETSPLIT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
133
{ "NETSPLIT_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
134
{ "NICKNAME", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
135
{ "NICKNAME_OTHER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
136
{ "NICKNAME_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
137
{ "NICK_AUTO", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
138
{ "NICK_COMP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
139
{ "NICK_MSG", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
140
{ "NONICK", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
141
{ "NOTE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
142
{ "NOTICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
143
{ "NOTIFY_OFF", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
144
{ "NOTIFY_ON", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
145
{ "NOTIFY_SIGNOFF", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
146
{ "NOTIFY_SIGNON", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
147
{ "OPER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
148
{ "OV", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
149
{ "PASTE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
150
{ "PUBLIC", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
151
{ "PUBLIC_AR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
152
{ "PUBLIC_MSG", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
153
{ "PUBLIC_MSG_AR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
154
{ "PUBLIC_NOTICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
155
{ "PUBLIC_NOTICE_AR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
156
{ "PUBLIC_OTHER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
157
{ "PUBLIC_OTHER_AR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
158
{ "REL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
159
{ "RELM", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
160
{ "RELN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
161
{ "RELS", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
162
{ "RELSM", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
163
{ "RELSN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
164
{ "SEND_ACTION", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
165
{ "SEND_ACTION_OTHER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
166
{ "SEND_AWAY", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
167
{ "SEND_CTCP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
168
{ "SEND_DCC_CHAT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
169
{ "SEND_ENCRYPTED_MSG", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
170
{ "SEND_ENCRYPTED_NOTICE",0,STR_TYPE_VAR,0, NULL, NULL, 0, 0},
171
{ "SEND_MSG", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
172
{ "SEND_NOTICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
173
{ "SEND_PUBLIC", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
174
{ "SEND_PUBLIC_OTHER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
175
{ "SERVER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
176
{ "SERVER_MSG1", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
177
{ "SERVER_MSG1_FROM", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
178
{ "SERVER_MSG2", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
179
{ "SERVER_MSG2_FROM", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
180
{ "SERVER_NOTICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
181
182
{ "SERVER_NOTICE_BOT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
183
{ "SERVER_NOTICE_BOT1", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
184
{ "SERVER_NOTICE_BOT_ALARM",0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
185
{ "SERVER_NOTICE_CLIENT_CONNECT",0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
186
{ "SERVER_NOTICE_CLIENT_EXIT",0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
187
{ "SERVER_NOTICE_CLIENT_INVALID",0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
188
{ "SERVER_NOTICE_CLIENT_TERM",0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
189
{ "SERVER_NOTICE_FAKE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
190
{ "SERVER_NOTICE_GLINE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
191
{ "SERVER_NOTICE_KILL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
192
{ "SERVER_NOTICE_KILL_LOCAL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
193
{ "SERVER_NOTICE_KLINE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
194
{ "SERVER_NOTICE_NICKC", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
195
{ "SERVER_NOTICE_OPER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
196
{ "SERVER_NOTICE_REHASH", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
197
{ "SERVER_NOTICE_STATS", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
198
{ "SERVER_NOTICE_TRAFFIC_HIGH", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
199
{ "SERVER_NOTICE_TRAFFIC_NORM", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
200
{ "SERVER_NOTICE_UNAUTH",0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
201
202
{ "SET", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
203
{ "SET_NOVALUE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
204
{ "SHITLIST", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
205
{ "SHITLIST_FOOTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
206
{ "SHITLIST_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
207
{ "SIGNOFF", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
208
{ "SILENCE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
209
{ "SMODE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
210
{ "STATUS", 0,STR_TYPE_VAR, 0, NULL, reinit_status, 0, 0},
211
{ "STATUS1", 0,STR_TYPE_VAR, 0, NULL, reinit_status, 0, 0},
212
{ "STATUS2", 0,STR_TYPE_VAR, 0, NULL, reinit_status, 0, 0},
213
{ "STATUS3", 0,STR_TYPE_VAR, 0, NULL, reinit_status, 0, 0},
214
{ "TIMER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
215
{ "TOPIC", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
216
{ "TOPIC_CHANGE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
217
{ "TOPIC_CHANGE_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
218
{ "TOPIC_SETBY", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
219
{ "TOPIC_UNSET", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
220
{ "TRACE_OPER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
221
{ "TRACE_SERVER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
222
{ "TRACE_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
223
{ "USAGE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
224
{ "USERLIST", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
225
{ "USERLIST_FOOTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
226
{ "USERLIST_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
227
{ "USERMODE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
228
{ "USERMODE_OTHER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
229
{ "USERS", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
230
{ "USERS_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
231
{ "USERS_SHIT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
232
{ "USERS_TITLE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
233
{ "USERS_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
234
{ "VERSION", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
235
{ "WALL", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
236
{ "WALLOP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
237
{ "WALL_AR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
238
{ "WATCH_SIGNON", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
239
{ "WATCH_SIGNOFF", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
240
{ "WHO", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
241
{ "WHOIS_ACTUALLY", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
242
{ "WHOIS_ADMIN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
243
{ "WHOIS_AWAY", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
244
{ "WHOIS_BOT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
245
{ "WHOIS_CALLERID", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
246
{ "WHOIS_CHANNELS", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
247
{ "WHOIS_FOOTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
248
{ "WHOIS_FRIEND", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
249
{ "WHOIS_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
250
{ "WHOIS_HELP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
251
{ "WHOIS_IDLE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
252
{ "WHOIS_NAME", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
253
{ "WHOIS_NICK", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
254
{ "WHOIS_OPER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
255
{ "WHOIS_REGISTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
256
{ "WHOIS_SECURE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
257
{ "WHOIS_SERVER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
258
{ "WHOIS_SERVICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
259
{ "WHOIS_SHIT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
260
{ "WHOIS_SIGNON", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
261
{ "WHOLEFT_FOOTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
262
{ "WHOLEFT_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
263
{ "WHOLEFT_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
264
{ "WHOWAS_HEADER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
265
{ "WHOWAS_NICK", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
266
{ "WIDELIST", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
267
{ "WINDOW_SET", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
268
{ "XTERM_TITLE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0},
269
{ NULL, 0, 0, 0, NULL, NULL, 0, 0}
270
};
271
272
typedef struct FSet_struc
273
{
274
IrcVariable **list;
275
int max;
276
int max_set;
277
alist_func func;
278
unsigned long hash;
279
} FSet;
280
281
int strncasecmp(const char *s1, const char *s2, size_t n);
282
283
FSet ext_fset_list = { NULL, 0, 0, strncasecmp, 0};
284
285
void delete_all_ext_fset(void)
286
{
287
IrcVariable *ptr;
288
int index;
289
290
for (index = 0; index < ext_fset_list.max; index++)
291
{
292
ptr = ext_fset_list.list[index];
293
new_free(&ptr->name);
294
new_free(&ptr->string);
295
new_free(&ptr);
296
}
297
new_free(&ext_fset_list.list);
298
ext_fset_list.max = 0;
299
ext_fset_list.max_set = 0;
300
}
301
302
void add_new_fset(char *name, char *args)
303
{
304
if (args && *args)
305
{
306
IrcVariable *tmp = NULL;
307
int cnt, loc;
308
tmp = (IrcVariable *)find_array_item((Array *)&ext_fset_list, name, &cnt, &loc);
309
if (!tmp || cnt >= 0)
310
{
311
tmp = new_malloc(sizeof(IrcVariable));
312
tmp->name = m_strdup(name);
313
tmp->type = STR_TYPE_VAR;
314
add_to_array((Array *)&ext_fset_list, (Array_item *)tmp);
315
}
316
malloc_strcpy(&tmp->string, args);
317
}
318
else
319
{
320
IrcVariable *tmp;
321
if ((tmp = (IrcVariable *)remove_from_array((Array *)&ext_fset_list, name)))
322
{
323
new_free(&tmp->name);
324
new_free(&tmp->string);
325
new_free(&tmp);
326
}
327
}
328
}
329
330
IrcVariable *find_ext_fset_var(char *name)
331
{
332
IrcVariable *tmp = NULL;
333
int loc, cnt;
334
tmp = (IrcVariable *)find_array_item((Array *)&ext_fset_list, name, &cnt, &loc);
335
if (tmp && cnt < 0)
336
return tmp;
337
return NULL;
338
}
339
340
341
342
char *BX_fget_string_var(enum FSET_TYPES var)
343
{
344
IrcVariable *tmp = NULL;
345
if ((tmp = find_ext_fset_var(fset_array[var].name)))
346
return tmp->string;
347
return (fset_array[var].string);
348
}
349
350
void BX_fset_string_var(enum FSET_TYPES var, char *value)
351
{
352
if (value && *value)
353
malloc_strcpy(&(fset_array[var].string), value);
354
else
355
new_free(&(fset_array[var].string));
356
}
357
358
static int find_fset_variable(IrcVariable *array, char *org_name, int *cnt)
359
{
360
IrcVariable *v, *first;
361
int len, var_index;
362
char *name = NULL;
363
364
name = LOCAL_COPY(org_name);
365
upper(name);
366
len = strlen(name);
367
var_index = 0;
368
for (first = array; first->name; first++, var_index++)
369
{
370
if (strncmp(name, first->name, len) == 0)
371
{
372
*cnt = 1;
373
break;
374
}
375
}
376
if (first->name)
377
{
378
if (strlen(first->name) != len)
379
{
380
v = first;
381
for (v++; v->name; v++, (*cnt)++)
382
{
383
if (strncmp(name, v->name, len) != 0)
384
break;
385
}
386
}
387
return (var_index);
388
}
389
else
390
{
391
*cnt = 0;
392
return (-1);
393
}
394
}
395
396
397
static void set_fset_var_value(int var_index, char *name, char *value)
398
{
399
IrcVariable *var = NULL;
400
if (name)
401
var = find_ext_fset_var(name);
402
if (!var)
403
var = &(fset_array[var_index]);
404
405
switch (var->type)
406
{
407
case STR_TYPE_VAR:
408
{
409
if (value)
410
{
411
if (*value)
412
malloc_strcpy(&(var->string), value);
413
else
414
{
415
put_it("%s", convert_output_format(fget_string_var(FORMAT_SET_FSET), "%s %s", var->name, var->string?var->string:empty_string));
416
return;
417
}
418
} else
419
new_free(&(var->string));
420
if (var->func)
421
(var->func) (current_window, var->string, 0);
422
say("Value of %s set to %s", var->name, var->string ?
423
var->string : "<EMPTY>");
424
}
425
break;
426
default:
427
say("FSET_type not supported");
428
}
429
}
430
431
static inline void fset_variable_case1(char *name, int var_index, char *args)
432
{
433
set_fset_var_value(var_index, name, args);
434
}
435
436
static inline void fset_variable_casedef(char *name, int cnt, int var_index, char *args)
437
{
438
FsetNumber *tmp;
439
for (cnt += var_index; var_index < cnt; var_index++)
440
set_fset_var_value(var_index, NULL, args);
441
if (!is_number(name))
442
return;
443
for (tmp = numeric_fset; tmp; tmp = tmp->next)
444
if (my_atol(name) == tmp->numeric)
445
put_it("%s", convert_output_format(fget_string_var(FORMAT_SET_FSET), "%d %s", tmp->numeric, tmp->format));
446
}
447
448
static inline void fset_variable_noargs(char *name)
449
{
450
int var_index = 0;
451
FsetNumber *tmp;
452
for (var_index = 0; var_index < NUMBER_OF_FSET; var_index++)
453
set_fset_var_value(var_index, NULL, empty_string);
454
for (var_index = 0; var_index < ext_fset_list.max; var_index++)
455
set_fset_var_value(var_index, (*ext_fset_list.list[var_index]).name, empty_string);
456
for (tmp = numeric_fset; tmp; tmp = tmp->next)
457
put_it("%s", convert_output_format(fget_string_var(FORMAT_SET_FSET), "%d %s", tmp->numeric, tmp->format));
458
}
459
460
BUILT_IN_COMMAND(fset_variable)
461
{
462
char *var;
463
char *name = NULL;
464
int cnt, var_index;
465
int hook = 0, remove = 0;
466
467
if ((var = next_arg(args, &args)) != NULL)
468
{
469
if (*var == '-')
470
{
471
var++;
472
remove = 1;
473
}
474
else if (*var == '+')
475
{
476
var++;
477
add_new_fset(var, args);
478
return;
479
}
480
if (!my_strnicmp(var, "FORMAT_", 7))
481
var = var + 7;
482
if (is_number(var))
483
{
484
add_numeric_fset(var, remove, args, 1);
485
return;
486
}
487
else if (remove)
488
args = NULL;
489
var_index = find_fset_variable(fset_array, var, &cnt);
490
491
if ((cnt >= 0) || !(fset_array[var_index].int_flags & VIF_PENDING))
492
hook = 1;
493
494
if (cnt < 0)
495
fset_array[var_index].int_flags |= VIF_PENDING;
496
497
if (hook)
498
hook = do_hook(SET_LIST, "%s %s", var, args ? args : empty_string);
499
else
500
hook = 1;
501
502
if (cnt < 0)
503
fset_array[var_index].int_flags &= ~VIF_PENDING;
504
505
if (hook)
506
{
507
switch (cnt)
508
{
509
case 0:
510
say("No such variable \"%s\"", var);
511
return;
512
case 1:
513
fset_variable_case1(name, var_index, args);
514
return;
515
default:
516
say("%s is ambiguous", var);
517
fset_variable_casedef(name, cnt, var_index, empty_string);
518
return;
519
}
520
}
521
} else
522
fset_variable_noargs(name);
523
}
524
525
526
void create_fsets(Window *win, int ansi)
527
{
528
#ifdef VAR_DEBUG
529
int i;
530
531
for (i = 1; i < NUMBER_OF_FSET - 1; i++)
532
if (strcmp(fset_array[i-1].name, fset_array[i].name) >= 0)
533
ircpanic("Variable [%d] (%s) is out of order.", i, fset_array[i].name);
534
#endif
535
536
if (sizeof fset_array / sizeof fset_array[0] != NUMBER_OF_FSET + 1)
537
ircpanic("Inconsistent fset_array - %d != %d",
538
sizeof fset_array / sizeof fset_array[0], NUMBER_OF_FSET + 1);
539
540
add_numeric_fset("381", 0, DEFAULT_FORMAT_381_FSET, 0);
541
add_numeric_fset("391", 0, DEFAULT_FORMAT_391_FSET, 0);
542
add_numeric_fset("471", 0, DEFAULT_FORMAT_471_FSET, 0);
543
add_numeric_fset("473", 0, DEFAULT_FORMAT_473_FSET, 0);
544
add_numeric_fset("474", 0, DEFAULT_FORMAT_474_FSET, 0);
545
add_numeric_fset("475", 0, DEFAULT_FORMAT_475_FSET, 0);
546
add_numeric_fset("476", 0, DEFAULT_FORMAT_476_FSET, 0);
547
548
fset_string_var(FORMAT_ACTION_FSET, DEFAULT_FORMAT_ACTION_FSET);
549
fset_string_var(FORMAT_ACTION_AR_FSET, DEFAULT_FORMAT_ACTION_AR_FSET);
550
fset_string_var(FORMAT_ACTION_CHANNEL_FSET, DEFAULT_FORMAT_ACTION_CHANNEL_FSET);
551
fset_string_var(FORMAT_ACTION_OTHER_FSET, DEFAULT_FORMAT_ACTION_OTHER_FSET);
552
fset_string_var(FORMAT_ACTION_OTHER_AR_FSET, DEFAULT_FORMAT_ACTION_OTHER_AR_FSET);
553
fset_string_var(FORMAT_ACTION_USER_FSET, DEFAULT_FORMAT_ACTION_USER_FSET);
554
fset_string_var(FORMAT_ACTION_USER_AR_FSET, DEFAULT_FORMAT_ACTION_USER_AR_FSET);
555
fset_string_var(FORMAT_ACTION_FSET, DEFAULT_FORMAT_ACTION_FSET);
556
fset_string_var(FORMAT_ACTION_AR_FSET, DEFAULT_FORMAT_ACTION_AR_FSET);
557
fset_string_var(FORMAT_ACTION_CHANNEL_FSET, DEFAULT_FORMAT_ACTION_CHANNEL_FSET);
558
fset_string_var(FORMAT_ACTION_OTHER_FSET, DEFAULT_FORMAT_ACTION_OTHER_FSET);
559
fset_string_var(FORMAT_ACTION_OTHER_AR_FSET, DEFAULT_FORMAT_ACTION_OTHER_AR_FSET);
560
fset_string_var(FORMAT_ACTION_USER_FSET, DEFAULT_FORMAT_ACTION_USER_FSET);
561
fset_string_var(FORMAT_ACTION_USER_AR_FSET, DEFAULT_FORMAT_ACTION_USER_AR_FSET);
562
fset_string_var(FORMAT_ALIAS_FSET, DEFAULT_FORMAT_ALIAS_FSET);
563
fset_string_var(FORMAT_ASSIGN_FSET, DEFAULT_FORMAT_ASSIGN_FSET);
564
fset_string_var(FORMAT_AWAY_FSET, DEFAULT_FORMAT_AWAY_FSET);
565
fset_string_var(FORMAT_BACK_FSET, DEFAULT_FORMAT_BACK_FSET);
566
567
fset_string_var(FORMAT_BANS_HEADER_FSET, DEFAULT_FORMAT_BANS_HEADER_FSET);
568
fset_string_var(FORMAT_BANS_FSET, DEFAULT_FORMAT_BANS_FSET);
569
#if defined(DEFAULT_FORMAT_BANS_FOOTER_FSET)
570
fset_string_var(FORMAT_BANS_FOOTER_FSET, DEFAULT_FORMAT_BANS_FOOTER_FSET);
571
#endif
572
573
fset_string_var(FORMAT_BITCH_FSET, DEFAULT_FORMAT_BITCH_FSET);
574
fset_string_var(FORMAT_BOT_HEADER_FSET, DEFAULT_FORMAT_BOT_HEADER_FSET);
575
fset_string_var(FORMAT_BOT_FOOTER_FSET, DEFAULT_FORMAT_BOT_FOOTER_FSET);
576
fset_string_var(FORMAT_BOT_FSET, DEFAULT_FORMAT_BOT_FSET);
577
fset_string_var(FORMAT_BWALL_FSET, DEFAULT_FORMAT_BWALL_FSET);
578
fset_string_var(FORMAT_CHANNEL_SIGNOFF_FSET, DEFAULT_FORMAT_CHANNEL_SIGNOFF_FSET);
579
fset_string_var(FORMAT_CHANNEL_URL_FSET, DEFAULT_FORMAT_CHANNEL_URL_FSET);
580
fset_string_var(FORMAT_CONNECT_FSET, DEFAULT_FORMAT_CONNECT_FSET);
581
fset_string_var(FORMAT_COMPLETE_FSET, DEFAULT_FORMAT_COMPLETE_FSET);
582
fset_string_var(FORMAT_CTCP_FSET, DEFAULT_FORMAT_CTCP_FSET);
583
fset_string_var(FORMAT_CTCP_CLOAK_FSET, DEFAULT_FORMAT_CTCP_CLOAK_FSET);
584
fset_string_var(FORMAT_CTCP_CLOAK_FUNC_FSET, DEFAULT_FORMAT_CTCP_CLOAK_FUNC_FSET);
585
fset_string_var(FORMAT_CTCP_CLOAK_FUNC_USER_FSET, DEFAULT_FORMAT_CTCP_CLOAK_FUNC_USER_FSET);
586
fset_string_var(FORMAT_CTCP_CLOAK_UNKNOWN_FSET, DEFAULT_FORMAT_CTCP_CLOAK_UNKNOWN_FSET);
587
fset_string_var(FORMAT_CTCP_CLOAK_UNKNOWN_USER_FSET, DEFAULT_FORMAT_CTCP_CLOAK_UNKNOWN_USER_FSET);
588
fset_string_var(FORMAT_CTCP_CLOAK_USER_FSET, DEFAULT_FORMAT_CTCP_CLOAK_USER_FSET);
589
fset_string_var(FORMAT_CTCP_FUNC_FSET, DEFAULT_FORMAT_CTCP_FUNC_FSET);
590
fset_string_var(FORMAT_CTCP_FUNC_USER_FSET, DEFAULT_FORMAT_CTCP_FUNC_USER_FSET);
591
fset_string_var(FORMAT_CTCP_UNKNOWN_FSET, DEFAULT_FORMAT_CTCP_UNKNOWN_FSET);
592
fset_string_var(FORMAT_CTCP_UNKNOWN_USER_FSET, DEFAULT_FORMAT_CTCP_UNKNOWN_USER_FSET);
593
fset_string_var(FORMAT_CTCP_USER_FSET, DEFAULT_FORMAT_CTCP_USER_FSET);
594
fset_string_var(FORMAT_CTCP_REPLY_FSET, DEFAULT_FORMAT_CTCP_REPLY_FSET);
595
fset_string_var(FORMAT_DCC_CHAT_FSET, DEFAULT_FORMAT_DCC_CHAT_FSET);
596
fset_string_var(FORMAT_DCC_CONNECT_FSET, DEFAULT_FORMAT_DCC_CONNECT_FSET);
597
fset_string_var(FORMAT_DCC_ERROR_FSET, DEFAULT_FORMAT_DCC_ERROR_FSET);
598
fset_string_var(FORMAT_DCC_LOST_FSET, DEFAULT_FORMAT_DCC_LOST_FSET);
599
fset_string_var(FORMAT_DCC_REQUEST_FSET, DEFAULT_FORMAT_DCC_REQUEST_FSET);
600
fset_string_var(FORMAT_DESYNC_FSET, DEFAULT_FORMAT_DESYNC_FSET);
601
fset_string_var(FORMAT_DISCONNECT_FSET, DEFAULT_FORMAT_DISCONNECT_FSET);
602
fset_string_var(FORMAT_ENCRYPTED_NOTICE_FSET, DEFAULT_FORMAT_ENCRYPTED_NOTICE_FSET);
603
fset_string_var(FORMAT_ENCRYPTED_PRIVMSG_FSET, DEFAULT_FORMAT_ENCRYPTED_PRIVMSG_FSET);
604
fset_string_var(FORMAT_FLOOD_FSET, DEFAULT_FORMAT_FLOOD_FSET);
605
fset_string_var(FORMAT_FRIEND_JOIN_FSET, DEFAULT_FORMAT_FRIEND_JOIN_FSET);
606
fset_string_var(FORMAT_HELP_FSET, DEFAULT_FORMAT_HELP_FSET);
607
fset_string_var(FORMAT_HOOK_FSET, DEFAULT_FORMAT_HOOK_FSET);
608
fset_string_var(FORMAT_INVITE_FSET, DEFAULT_FORMAT_INVITE_FSET);
609
fset_string_var(FORMAT_INVITE_USER_FSET, DEFAULT_FORMAT_INVITE_USER_FSET);
610
fset_string_var(FORMAT_JOIN_FSET, DEFAULT_FORMAT_JOIN_FSET);
611
fset_string_var(FORMAT_KICK_FSET, DEFAULT_FORMAT_KICK_FSET);
612
fset_string_var(FORMAT_KICK_USER_FSET, DEFAULT_FORMAT_KICK_USER_FSET);
613
fset_string_var(FORMAT_KILL_FSET, DEFAULT_FORMAT_KILL_FSET);
614
fset_string_var(FORMAT_LEAVE_FSET, DEFAULT_FORMAT_LEAVE_FSET);
615
fset_string_var(FORMAT_LINKS_FSET, DEFAULT_FORMAT_LINKS_FSET);
616
fset_string_var(FORMAT_LINKS_FSET, DEFAULT_FORMAT_LINKS_FSET);
617
fset_string_var(FORMAT_LIST_FSET, DEFAULT_FORMAT_LIST_FSET);
618
fset_string_var(FORMAT_MAIL_FSET, DEFAULT_FORMAT_MAIL_FSET);
619
fset_string_var(FORMAT_MSGCOUNT_FSET, DEFAULT_FORMAT_MSGCOUNT_FSET);
620
fset_string_var(FORMAT_MSGLOG_FSET, DEFAULT_FORMAT_MSGLOG_FSET);
621
fset_string_var(FORMAT_MODE_FSET, DEFAULT_FORMAT_MODE_FSET);
622
fset_string_var(FORMAT_SMODE_FSET, DEFAULT_FORMAT_SMODE_FSET);
623
fset_string_var(FORMAT_MODE_CHANNEL_FSET, DEFAULT_FORMAT_MODE_CHANNEL_FSET);
624
fset_string_var(FORMAT_MSG_FSET, DEFAULT_FORMAT_MSG_FSET);
625
fset_string_var(FORMAT_OPER_FSET, DEFAULT_FORMAT_OPER_FSET);
626
fset_string_var(FORMAT_IGNORE_INVITE_FSET, DEFAULT_FORMAT_IGNORE_INVITE_FSET);
627
fset_string_var(FORMAT_IGNORE_MSG_FSET, DEFAULT_FORMAT_IGNORE_MSG_FSET);
628
fset_string_var(FORMAT_IGNORE_MSG_AWAY_FSET, DEFAULT_FORMAT_IGNORE_MSG_AWAY_FSET);
629
fset_string_var(FORMAT_IGNORE_NOTICE_FSET, DEFAULT_FORMAT_IGNORE_NOTICE_FSET);
630
fset_string_var(FORMAT_IGNORE_WALL_FSET, DEFAULT_FORMAT_IGNORE_WALL_FSET);
631
fset_string_var(FORMAT_MSG_GROUP_FSET, DEFAULT_FORMAT_MSG_GROUP_FSET);
632
fset_string_var(FORMAT_NAMES_FSET, DEFAULT_FORMAT_NAMES_FSET);
633
fset_string_var(FORMAT_NAMES_BOT_FSET, DEFAULT_FORMAT_NAMES_BOT_FSET);
634
fset_string_var(FORMAT_NAMES_FRIEND_FSET, DEFAULT_FORMAT_NAMES_FRIEND_FSET);
635
fset_string_var(FORMAT_NAMES_NICK_FSET, DEFAULT_FORMAT_NAMES_NICK_FSET);
636
fset_string_var(FORMAT_NAMES_NICK_BOT_FSET, DEFAULT_FORMAT_NAMES_NICK_BOT_FSET);
637
fset_string_var(FORMAT_NAMES_NICK_FRIEND_FSET, DEFAULT_FORMAT_NAMES_NICK_FRIEND_FSET);
638
fset_string_var(FORMAT_NAMES_NICK_ME_FSET, DEFAULT_FORMAT_NAMES_NICK_ME_FSET);
639
fset_string_var(FORMAT_NAMES_NICK_SHIT_FSET, DEFAULT_FORMAT_NAMES_NICK_SHIT_FSET);
640
fset_string_var(FORMAT_NAMES_NONOP_FSET, DEFAULT_FORMAT_NAMES_NONOP_FSET);
641
fset_string_var(FORMAT_NAMES_OP_FSET, DEFAULT_FORMAT_NAMES_OP_FSET);
642
fset_string_var(FORMAT_NAMES_IRCOP_FSET, DEFAULT_FORMAT_NAMES_IRCOP_FSET);
643
fset_string_var(FORMAT_NAMES_SHIT_FSET, DEFAULT_FORMAT_NAMES_SHIT_FSET);
644
fset_string_var(FORMAT_NAMES_USER_FSET, DEFAULT_FORMAT_NAMES_USER_FSET);
645
fset_string_var(FORMAT_NAMES_USER_CHANOP_FSET, DEFAULT_FORMAT_NAMES_USER_CHANOP_FSET);
646
fset_string_var(FORMAT_NAMES_USER_IRCOP_FSET, DEFAULT_FORMAT_NAMES_USER_IRCOP_FSET);
647
fset_string_var(FORMAT_NAMES_USER_VOICE_FSET, DEFAULT_FORMAT_NAMES_USER_VOICE_FSET);
648
fset_string_var(FORMAT_NAMES_VOICE_FSET, DEFAULT_FORMAT_NAMES_VOICE_FSET);
649
fset_string_var(FORMAT_NETADD_FSET, DEFAULT_FORMAT_NETADD_FSET);
650
fset_string_var(FORMAT_NETJOIN_FSET, DEFAULT_FORMAT_NETJOIN_FSET);
651
fset_string_var(FORMAT_NETSPLIT_FSET, DEFAULT_FORMAT_NETSPLIT_FSET);
652
fset_string_var(FORMAT_NICKNAME_FSET, DEFAULT_FORMAT_NICKNAME_FSET);
653
fset_string_var(FORMAT_NICKNAME_OTHER_FSET, DEFAULT_FORMAT_NICKNAME_OTHER_FSET);
654
fset_string_var(FORMAT_NICKNAME_USER_FSET, DEFAULT_FORMAT_NICKNAME_USER_FSET);
655
fset_string_var(FORMAT_NONICK_FSET, DEFAULT_FORMAT_NONICK_FSET);
656
fset_string_var(FORMAT_NOTE_FSET, DEFAULT_FORMAT_NOTE_FSET);
657
fset_string_var(FORMAT_NOTICE_FSET, DEFAULT_FORMAT_NOTICE_FSET);
658
fset_string_var(FORMAT_REL_FSET, DEFAULT_FORMAT_REL_FSET);
659
fset_string_var(FORMAT_RELN_FSET, DEFAULT_FORMAT_RELN_FSET);
660
fset_string_var(FORMAT_RELM_FSET, DEFAULT_FORMAT_RELM_FSET);
661
fset_string_var(FORMAT_RELSN_FSET, DEFAULT_FORMAT_RELSN_FSET);
662
fset_string_var(FORMAT_RELS_FSET, DEFAULT_FORMAT_RELS_FSET);
663
fset_string_var(FORMAT_RELSM_FSET, DEFAULT_FORMAT_RELSM_FSET);
664
fset_string_var(FORMAT_NOTIFY_SIGNOFF_FSET, DEFAULT_FORMAT_NOTIFY_SIGNOFF_FSET);
665
fset_string_var(FORMAT_NOTIFY_SIGNON_FSET, DEFAULT_FORMAT_NOTIFY_SIGNON_FSET);
666
fset_string_var(FORMAT_PASTE_FSET, DEFAULT_FORMAT_PASTE_FSET);
667
fset_string_var(FORMAT_PUBLIC_FSET, DEFAULT_FORMAT_PUBLIC_FSET);
668
fset_string_var(FORMAT_PUBLIC_AR_FSET, DEFAULT_FORMAT_PUBLIC_AR_FSET);
669
fset_string_var(FORMAT_PUBLIC_MSG_FSET, DEFAULT_FORMAT_PUBLIC_MSG_FSET);
670
fset_string_var(FORMAT_PUBLIC_MSG_AR_FSET, DEFAULT_FORMAT_PUBLIC_MSG_AR_FSET);
671
fset_string_var(FORMAT_PUBLIC_NOTICE_FSET, DEFAULT_FORMAT_PUBLIC_NOTICE_FSET);
672
fset_string_var(FORMAT_PUBLIC_NOTICE_AR_FSET, DEFAULT_FORMAT_PUBLIC_NOTICE_AR_FSET);
673
fset_string_var(FORMAT_PUBLIC_OTHER_FSET, DEFAULT_FORMAT_PUBLIC_OTHER_FSET);
674
fset_string_var(FORMAT_PUBLIC_OTHER_AR_FSET, DEFAULT_FORMAT_PUBLIC_OTHER_AR_FSET);
675
fset_string_var(FORMAT_SEND_ACTION_FSET, DEFAULT_FORMAT_SEND_ACTION_FSET);
676
fset_string_var(FORMAT_SEND_ACTION_OTHER_FSET, DEFAULT_FORMAT_SEND_ACTION_OTHER_FSET);
677
fset_string_var(FORMAT_SEND_ACTION_FSET, DEFAULT_FORMAT_SEND_ACTION_FSET);
678
fset_string_var(FORMAT_SEND_ACTION_OTHER_FSET, DEFAULT_FORMAT_SEND_ACTION_OTHER_FSET);
679
fset_string_var(FORMAT_SEND_AWAY_FSET, DEFAULT_FORMAT_SEND_AWAY_FSET);
680
fset_string_var(FORMAT_SEND_CTCP_FSET, DEFAULT_FORMAT_SEND_CTCP_FSET);
681
fset_string_var(FORMAT_SEND_DCC_CHAT_FSET, DEFAULT_FORMAT_SEND_DCC_CHAT_FSET);
682
fset_string_var(FORMAT_SEND_ENCRYPTED_NOTICE_FSET, DEFAULT_FORMAT_SEND_ENCRYPTED_NOTICE_FSET);
683
fset_string_var(FORMAT_SEND_ENCRYPTED_MSG_FSET, DEFAULT_FORMAT_SEND_ENCRYPTED_MSG_FSET);
684
685
fset_string_var(FORMAT_SEND_MSG_FSET, DEFAULT_FORMAT_SEND_MSG_FSET);
686
fset_string_var(FORMAT_SEND_NOTICE_FSET, DEFAULT_FORMAT_SEND_NOTICE_FSET);
687
fset_string_var(FORMAT_SEND_PUBLIC_FSET, DEFAULT_FORMAT_SEND_PUBLIC_FSET);
688
fset_string_var(FORMAT_SEND_PUBLIC_OTHER_FSET, DEFAULT_FORMAT_SEND_PUBLIC_OTHER_FSET);
689
fset_string_var(FORMAT_SERVER_FSET, DEFAULT_FORMAT_SERVER_FSET);
690
fset_string_var(FORMAT_SERVER_MSG1_FSET, DEFAULT_FORMAT_SERVER_MSG1_FSET);
691
fset_string_var(FORMAT_SERVER_MSG1_FROM_FSET, DEFAULT_FORMAT_SERVER_MSG1_FROM_FSET);
692
fset_string_var(FORMAT_SERVER_MSG2_FSET, DEFAULT_FORMAT_SERVER_MSG2_FSET);
693
fset_string_var(FORMAT_SERVER_MSG2_FROM_FSET, DEFAULT_FORMAT_SERVER_MSG2_FROM_FSET);
694
fset_string_var(FORMAT_SERVER_NOTICE_FSET, DEFAULT_FORMAT_SERVER_NOTICE_FSET);
695
fset_string_var(FORMAT_SERVER_NOTICE_BOT_FSET, DEFAULT_FORMAT_SERVER_NOTICE_BOT_FSET);
696
fset_string_var(FORMAT_SERVER_NOTICE_BOT1_FSET, DEFAULT_FORMAT_SERVER_NOTICE_BOT1_FSET);
697
fset_string_var(FORMAT_SERVER_NOTICE_BOT_ALARM_FSET, DEFAULT_FORMAT_SERVER_NOTICE_BOT_ALARM_FSET);
698
fset_string_var(FORMAT_SERVER_NOTICE_CLIENT_CONNECT_FSET, DEFAULT_FORMAT_SERVER_NOTICE_CLIENT_CONNECT_FSET);
699
fset_string_var(FORMAT_SERVER_NOTICE_CLIENT_EXIT_FSET, DEFAULT_FORMAT_SERVER_NOTICE_CLIENT_EXIT_FSET);
700
fset_string_var(FORMAT_SERVER_NOTICE_CLIENT_INVALID_FSET, DEFAULT_FORMAT_SERVER_NOTICE_CLIENT_INVALID_FSET);
701
fset_string_var(FORMAT_SERVER_NOTICE_CLIENT_TERM_FSET, DEFAULT_FORMAT_SERVER_NOTICE_CLIENT_TERM_FSET);
702
fset_string_var(FORMAT_SERVER_NOTICE_FAKE_FSET, DEFAULT_FORMAT_SERVER_NOTICE_FAKE_FSET);
703
fset_string_var(FORMAT_SERVER_NOTICE_KILL_FSET, DEFAULT_FORMAT_SERVER_NOTICE_KILL_FSET);
704
fset_string_var(FORMAT_SERVER_NOTICE_KILL_LOCAL_FSET, DEFAULT_FORMAT_SERVER_NOTICE_KILL_LOCAL_FSET);
705
fset_string_var(FORMAT_SERVER_NOTICE_KLINE_FSET, DEFAULT_FORMAT_SERVER_NOTICE_KLINE_FSET);
706
fset_string_var(FORMAT_SERVER_NOTICE_GLINE_FSET, DEFAULT_FORMAT_SERVER_NOTICE_GLINE_FSET);
707
fset_string_var(FORMAT_SERVER_NOTICE_NICK_COLLISION_FSET, DEFAULT_FORMAT_SERVER_NOTICE_NICK_COLLISION_FSET);
708
fset_string_var(FORMAT_SERVER_NOTICE_OPER_FSET, DEFAULT_FORMAT_SERVER_NOTICE_OPER_FSET);
709
fset_string_var(FORMAT_SERVER_NOTICE_REHASH_FSET, DEFAULT_FORMAT_SERVER_NOTICE_REHASH_FSET);
710
fset_string_var(FORMAT_SERVER_NOTICE_STATS_FSET, DEFAULT_FORMAT_SERVER_NOTICE_STATS_FSET);
711
fset_string_var(FORMAT_SERVER_NOTICE_TRAFFIC_HIGH_FSET, DEFAULT_FORMAT_SERVER_NOTICE_TRAFFIC_HIGH_FSET);
712
fset_string_var(FORMAT_SERVER_NOTICE_TRAFFIC_NORM_FSET, DEFAULT_FORMAT_SERVER_NOTICE_TRAFFIC_NORM_FSET);
713
fset_string_var(FORMAT_SERVER_NOTICE_UNAUTH_FSET, DEFAULT_FORMAT_SERVER_NOTICE_UNAUTH_FSET);
714
fset_string_var(FORMAT_SET_FSET, DEFAULT_FORMAT_SET_FSET);
715
fset_string_var(FORMAT_CSET_FSET, DEFAULT_FORMAT_CSET_FSET);
716
fset_string_var(FORMAT_SET_NOVALUE_FSET, DEFAULT_FORMAT_SET_NOVALUE_FSET);
717
fset_string_var(FORMAT_SHITLIST_FSET, DEFAULT_FORMAT_SHITLIST_FSET);
718
fset_string_var(FORMAT_SHITLIST_FOOTER_FSET, DEFAULT_FORMAT_SHITLIST_FOOTER_FSET);
719
fset_string_var(FORMAT_SHITLIST_HEADER_FSET, DEFAULT_FORMAT_SHITLIST_HEADER_FSET);
720
fset_string_var(FORMAT_SIGNOFF_FSET, DEFAULT_FORMAT_SIGNOFF_FSET);
721
fset_string_var(FORMAT_SILENCE_FSET, DEFAULT_FORMAT_SILENCE_FSET);
722
fset_string_var(FORMAT_TRACE_OPER_FSET, DEFAULT_FORMAT_TRACE_OPER_FSET);
723
fset_string_var(FORMAT_TRACE_SERVER_FSET, DEFAULT_FORMAT_TRACE_SERVER_FSET);
724
fset_string_var(FORMAT_TRACE_USER_FSET, DEFAULT_FORMAT_TRACE_USER_FSET);
725
fset_string_var(FORMAT_TIMER_FSET, DEFAULT_FORMAT_TIMER_FSET);
726
fset_string_var(FORMAT_TOPIC_FSET, DEFAULT_FORMAT_TOPIC_FSET);
727
fset_string_var(FORMAT_TOPIC_CHANGE_FSET, DEFAULT_FORMAT_TOPIC_CHANGE_FSET);
728
fset_string_var(FORMAT_TOPIC_SETBY_FSET, DEFAULT_FORMAT_TOPIC_SETBY_FSET);
729
fset_string_var(FORMAT_TOPIC_UNSET_FSET, DEFAULT_FORMAT_TOPIC_UNSET_FSET);
730
fset_string_var(FORMAT_USAGE_FSET, DEFAULT_FORMAT_USAGE_FSET);
731
fset_string_var(FORMAT_USERMODE_FSET, DEFAULT_FORMAT_USERMODE_FSET);
732
fset_string_var(FORMAT_USERMODE_OTHER_FSET, DEFAULT_FORMAT_USERMODE_OTHER_FSET);
733
fset_string_var(FORMAT_USERLIST_FSET, DEFAULT_FORMAT_USERLIST_FSET);
734
fset_string_var(FORMAT_USERLIST_FOOTER_FSET, DEFAULT_FORMAT_USERLIST_FOOTER_FSET);
735
fset_string_var(FORMAT_USERLIST_HEADER_FSET, DEFAULT_FORMAT_USERLIST_HEADER_FSET);
736
fset_string_var(FORMAT_USERS_FSET, DEFAULT_FORMAT_USERS_FSET);
737
fset_string_var(FORMAT_USERS_USER_FSET, DEFAULT_FORMAT_USERS_USER_FSET);
738
fset_string_var(FORMAT_USERS_TITLE_FSET, DEFAULT_FORMAT_USERS_TITLE_FSET);
739
fset_string_var(FORMAT_USERS_SHIT_FSET, DEFAULT_FORMAT_USERS_SHIT_FSET);
740
fset_string_var(FORMAT_USERS_HEADER_FSET, DEFAULT_FORMAT_USERS_HEADER_FSET);
741
fset_string_var(FORMAT_VERSION_FSET, DEFAULT_FORMAT_VERSION_FSET);
742
fset_string_var(FORMAT_WALL_FSET, DEFAULT_FORMAT_WALL_FSET);
743
fset_string_var(FORMAT_WALL_AR_FSET, DEFAULT_FORMAT_WALL_AR_FSET);
744
fset_string_var(FORMAT_WALLOP_FSET, DEFAULT_FORMAT_WALLOP_FSET);
745
fset_string_var(FORMAT_WHO_FSET, DEFAULT_FORMAT_WHO_FSET);
746
fset_string_var(FORMAT_WHOIS_ACTUALLY_FSET, DEFAULT_FORMAT_WHOIS_ACTUALLY_FSET);
747
fset_string_var(FORMAT_WHOIS_AWAY_FSET, DEFAULT_FORMAT_WHOIS_AWAY_FSET);
748
fset_string_var(FORMAT_WHOIS_BOT_FSET, DEFAULT_FORMAT_WHOIS_BOT_FSET);
749
fset_string_var(FORMAT_WHOIS_CALLERID_FSET, DEFAULT_FORMAT_WHOIS_CALLERID_FSET);
750
fset_string_var(FORMAT_WHOIS_CHANNELS_FSET, DEFAULT_FORMAT_WHOIS_CHANNELS_FSET);
751
fset_string_var(FORMAT_WHOIS_FRIEND_FSET, DEFAULT_FORMAT_WHOIS_FRIEND_FSET);
752
fset_string_var(FORMAT_WHOIS_HEADER_FSET, DEFAULT_FORMAT_WHOIS_HEADER_FSET);
753
fset_string_var(FORMAT_WHOIS_IDLE_FSET, DEFAULT_FORMAT_WHOIS_IDLE_FSET);
754
fset_string_var(FORMAT_WHOIS_SHIT_FSET, DEFAULT_FORMAT_WHOIS_SHIT_FSET);
755
fset_string_var(FORMAT_WHOIS_SIGNON_FSET, DEFAULT_FORMAT_WHOIS_SIGNON_FSET);
756
fset_string_var(FORMAT_WHOIS_NAME_FSET, DEFAULT_FORMAT_WHOIS_NAME_FSET);
757
fset_string_var(FORMAT_WHOIS_NICK_FSET, DEFAULT_FORMAT_WHOIS_NICK_FSET);
758
fset_string_var(FORMAT_WHOIS_OPER_FSET, DEFAULT_FORMAT_WHOIS_OPER_FSET);
759
fset_string_var(FORMAT_WHOIS_SECURE_FSET, DEFAULT_FORMAT_WHOIS_SECURE_FSET);
760
fset_string_var(FORMAT_WHOIS_SERVER_FSET, DEFAULT_FORMAT_WHOIS_SERVER_FSET);
761
fset_string_var(FORMAT_WHOLEFT_HEADER_FSET, DEFAULT_FORMAT_WHOLEFT_HEADER_FSET);
762
fset_string_var(FORMAT_WHOLEFT_USER_FSET, DEFAULT_FORMAT_WHOLEFT_USER_FSET);
763
fset_string_var(FORMAT_WHOWAS_HEADER_FSET, DEFAULT_FORMAT_WHOWAS_HEADER_FSET);
764
fset_string_var(FORMAT_WHOWAS_NICK_FSET, DEFAULT_FORMAT_WHOWAS_NICK_FSET);
765
fset_string_var(FORMAT_WHOIS_ADMIN_FSET, DEFAULT_FORMAT_WHOIS_ADMIN_FSET);
766
fset_string_var(FORMAT_WHOIS_SERVICE_FSET, DEFAULT_FORMAT_WHOIS_SERVICE_FSET);
767
fset_string_var(FORMAT_WHOIS_HELP_FSET, DEFAULT_FORMAT_WHOIS_HELP_FSET);
768
fset_string_var(FORMAT_WHOIS_REGISTER_FSET, DEFAULT_FORMAT_WHOIS_REGISTER_FSET);
769
fset_string_var(FORMAT_WIDELIST_FSET, DEFAULT_FORMAT_WIDELIST_FSET);
770
fset_string_var(FORMAT_WINDOW_SET_FSET, DEFAULT_FORMAT_WINDOW_SET_FSET);
771
fset_string_var(FORMAT_NICK_MSG_FSET, DEFAULT_FORMAT_NICK_MSG_FSET);
772
fset_string_var(FORMAT_NICK_COMP_FSET, DEFAULT_FORMAT_NICK_COMP_FSET);
773
fset_string_var(FORMAT_NICK_AUTO_FSET, DEFAULT_FORMAT_NICK_AUTO_FSET);
774
fset_string_var(FORMAT_STATUS_FSET, DEFAULT_FORMAT_STATUS_FSET);
775
fset_string_var(FORMAT_STATUS1_FSET, DEFAULT_FORMAT_STATUS1_FSET);
776
fset_string_var(FORMAT_STATUS2_FSET, DEFAULT_FORMAT_STATUS2_FSET);
777
fset_string_var(FORMAT_STATUS3_FSET, DEFAULT_FORMAT_STATUS3_FSET);
778
fset_string_var(FORMAT_NOTIFY_OFF_FSET, DEFAULT_FORMAT_NOTIFY_OFF_FSET);
779
fset_string_var(FORMAT_NOTIFY_ON_FSET, DEFAULT_FORMAT_NOTIFY_ON_FSET);
780
fset_string_var(FORMAT_OV_FSET, DEFAULT_FORMAT_OV_FSET);
781
782
fset_string_var(FORMAT_WHOIS_FOOTER_FSET, NULL);
783
fset_string_var(FORMAT_XTERM_TITLE_FSET, NULL);
784
fset_string_var(FORMAT_DCC_FSET, NULL);
785
fset_string_var(FORMAT_NAMES_FOOTER_FSET, NULL);
786
fset_string_var(FORMAT_NETSPLIT_HEADER_FSET, NULL);
787
fset_string_var(FORMAT_TOPIC_CHANGE_HEADER_FSET, NULL);
788
fset_string_var(FORMAT_WHOLEFT_FOOTER_FSET, NULL);
789
fset_string_var(FORMAT_LASTLOG_FSET, DEFAULT_FORMAT_LASTLOG_FSET);
790
fset_string_var(FORMAT_EBANS_FSET, DEFAULT_FORMAT_EBANS_FSET);
791
fset_string_var(FORMAT_EBANS_HEADER_FSET, DEFAULT_FORMAT_EBANS_HEADER_FSET);
792
793
fset_string_var(FORMAT_WATCH_SIGNOFF_FSET, DEFAULT_FORMAT_WATCH_SIGNOFF_FSET);
794
fset_string_var(FORMAT_WATCH_SIGNON_FSET, DEFAULT_FORMAT_WATCH_SIGNON_FSET);
795
796
#if defined(DEFAULT_FORMAT_EBANS_FOOTER_FSET)
797
fset_string_var(FORMAT_EBANS_FOOTER_FSET, DEFAULT_FORMAT_EBANS_FOOTER_FSET);
798
#endif
799
}
800
801
int save_formats(FILE *outfile)
802
{
803
char thefile[BIG_BUFFER_SIZE+1];
804
char *p;
805
int i;
806
int count = 0;
807
FsetNumber *tmp;
808
809
#if defined(__EMX__) || defined(WINNT)
810
sprintf(thefile, "%s/%s.fmt", get_string_var(CTOOLZ_DIR_VAR), version);
811
#else
812
sprintf(thefile, "%s/%s.formats", get_string_var(CTOOLZ_DIR_VAR), version);
813
#endif
814
p = expand_twiddle(thefile);
815
outfile = fopen(p, "w");
816
if (!outfile)
817
{
818
bitchsay("Cannot open file %s for saving!", thefile);
819
new_free(&p);
820
return 1;
821
}
822
for (i = 0; i < NUMBER_OF_FSET; i++)
823
{
824
825
if (fset_array[i].string)
826
fprintf(outfile, "FSET %s %s\n", fset_array[i].name, fset_array[i].string);
827
else
828
fprintf(outfile, "FSET -%s\n", fset_array[i].name);
829
}
830
count = NUMBER_OF_FSET;
831
for (tmp = numeric_fset; tmp; tmp = tmp->next) {
832
fprintf(outfile, "FSET %d %s\n", tmp->numeric, tmp->format);
833
count++;
834
}
835
836
fclose(outfile);
837
bitchsay("Saved %d formats to %s", count, thefile);
838
new_free(&p);
839
return 0;
840
}
841
842
void clear_fset(void)
843
{
844
int i;
845
for (i = 0; i < NUMBER_OF_FSET; i++)
846
{
847
if (fset_array[i].string)
848
new_free(&fset_array[i].string);
849
}
850
}
851
852
char *get_all_fset(void)
853
{
854
int i;
855
char *ret = NULL;
856
IrcVariable *ptr;
857
FsetNumber *tmp = numeric_fset;
858
for (i = 0; i < NUMBER_OF_FSET; i++)
859
m_s3cat(&ret, space, fset_array[i].name);
860
for (i = 0; i < ext_fset_list.max; i++)
861
{
862
ptr = ext_fset_list.list[i];
863
m_s3cat(&ret, space, ptr->name);
864
}
865
for (tmp = numeric_fset; tmp; tmp = tmp->next)
866
m_s3cat(&ret, space, ltoa(tmp->numeric));
867
return ret;
868
}
869
870
char *get_fset(char *str)
871
{
872
int i;
873
char *ret = NULL;
874
IrcVariable *ptr;
875
FsetNumber *tmp;
876
if (!str || !*str)
877
return get_all_fset();
878
for (i = 0; i < NUMBER_OF_FSET; i++)
879
if (wild_match(str, fset_array[i].name))
880
m_s3cat(&ret, space, fset_array[i].name);
881
for (i = 0; i < ext_fset_list.max; i++)
882
{
883
ptr = ext_fset_list.list[i];
884
if (wild_match(str, ptr->name))
885
m_s3cat(&ret, space, ptr->name);
886
}
887
for (tmp = numeric_fset; tmp; tmp = tmp->next)
888
if (wild_match(str, ltoa(tmp->numeric)))
889
m_s3cat(&ret, space, ltoa(tmp->numeric));
890
return ret ? ret : m_strdup(empty_string);
891
}
892
893
IrcVariable *fget_var_address(char *var_name)
894
{
895
IrcVariable *var = NULL;
896
int cnt,
897
msv_index;
898
char *tmp_var = alloca(strlen(var_name)+1);
899
strcpy(tmp_var, var_name);
900
upper(tmp_var);
901
if ((var = find_ext_fset_var(tmp_var)))
902
return var;
903
if ((find_fixed_array_item (fset_array, sizeof(IrcVariable), NUMBER_OF_FSET, tmp_var, &cnt, &msv_index) == NULL))
904
return NULL;
905
if (cnt >= 0)
906
return NULL;
907
return &fset_array[msv_index];
908
}
909
910
char *make_fstring_var(const char *var_name)
911
{
912
IrcVariable *var = NULL;
913
int cnt,
914
msv_index;
915
char *ret = NULL;
916
char *tmp_var;
917
918
tmp_var = LOCAL_COPY(var_name);
919
upper(tmp_var);
920
if ((var = find_ext_fset_var(tmp_var)))
921
return m_strdup(var->string);
922
923
if (!strncmp(tmp_var, "FORMAT_", 7))
924
tmp_var += 7;
925
if ((find_fixed_array_item (fset_array, sizeof(IrcVariable), NUMBER_OF_FSET, tmp_var, &cnt, &msv_index) == NULL))
926
{
927
if ((ret = find_numeric_fset(my_atol(tmp_var))))
928
return m_strdup(ret);
929
return NULL;
930
}
931
if (cnt >= 0)
932
return NULL;
933
switch (fset_array[msv_index].type)
934
{
935
case STR_TYPE_VAR:
936
ret = m_strdup(fset_array[msv_index].string);
937
break;
938
case INT_TYPE_VAR:
939
ret = m_strdup(ltoa(fset_array[msv_index].integer));
940
break;
941
case BOOL_TYPE_VAR:
942
ret = m_strdup(var_settings[fset_array[msv_index].integer]);
943
break;
944
case CHAR_TYPE_VAR:
945
ret = m_dupchar(fset_array[msv_index].integer);
946
break;
947
}
948
return ret;
949
}
950
951
#ifdef WANT_TCL
952
char *fset_rem_str(ClientData *cd, Tcl_Interp *intp, char *name1, char *name2, int flags)
953
{
954
char *s;
955
IrcVariable *n;
956
n = (IrcVariable *)cd;
957
if ((s = Tcl_GetVar(intp, name1, TCL_GLOBAL_ONLY)))
958
{
959
malloc_strcpy(&n->string, s);
960
}
961
return NULL;
962
}
963
964
void add_tcl_fset(Tcl_Interp *irp)
965
{
966
char varname[180];
967
int i = 0;
968
for(i = 0; fset_array[i].name; i++)
969
{
970
int type_of = -1;
971
switch(fset_array[i].type)
972
{
973
case INT_TYPE_VAR:
974
type_of = TCL_LINK_INT;
975
break;
976
case STR_TYPE_VAR:
977
type_of = TCL_LINK_STRING;
978
break;
979
case BOOL_TYPE_VAR:
980
type_of = TCL_LINK_BOOLEAN;
981
break;
982
default:
983
continue;
984
}
985
strncpy(varname, fset_array[i].name, 80);
986
lower(varname);
987
type_of |= TCL_LINK_READ_ONLY;
988
Tcl_LinkVar(irp, varname,
989
(fset_array[i].type == STR_TYPE_VAR) ?
990
(char *)&fset_array[i].string :
991
(char *)&fset_array[i].integer,
992
type_of);
993
#if 0
994
if (fset_array[i].type == STR_TYPE_VAR)
995
{
996
Tcl_TraceVar(irp, varname, TCL_TRACE_WRITES,
997
(Tcl_VarTraceProc *)fset_rem_str, (ClientData)&fset_array[i]);
998
}
999
#endif
1000
}
1001
}
1002
#endif
1003
1004
1005
#ifdef GUI
1006
IrcVariable *return_fset_var(int nummer)
1007
{
1008
return &fset_array[nummer];
1009
}
1010
#endif
1011
1012
/* This is a horrible hack so that the standard List functions can be used
1013
* for the numeric list.
1014
*/
1015
int compare_number(List *item1, List *item2)
1016
{
1017
FsetNumber *real1 = (FsetNumber *)item1;
1018
FsetNumber *real2 = (FsetNumber *)item2;
1019
1020
return real1->numeric - real2->numeric;
1021
}
1022
1023
char *find_numeric_fset(int numeric)
1024
{
1025
FsetNumber *tmp = numeric_fset;
1026
while (tmp)
1027
{
1028
if (tmp->numeric == numeric)
1029
return tmp->format;
1030
tmp = tmp->next;
1031
}
1032
return NULL;
1033
}
1034
1035
void add_numeric_fset(char *name, int remove, char *args, int verbose)
1036
{
1037
FsetNumber *tmp = numeric_fset, *last = NULL;
1038
int num = my_atol(name);
1039
for (tmp = numeric_fset; tmp; tmp = tmp->next)
1040
{
1041
if (num == tmp->numeric)
1042
{
1043
if (remove)
1044
{
1045
if (last)
1046
last->next = tmp->next;
1047
else
1048
numeric_fset = tmp->next;
1049
new_free(&tmp->format);
1050
new_free(&tmp);
1051
return;
1052
}
1053
else
1054
{
1055
if (args && *args)
1056
malloc_strcpy(&tmp->format, args);
1057
if (verbose)
1058
bitchsay("Numeric %d is %s", num, tmp->format);
1059
return;
1060
}
1061
}
1062
last = tmp;
1063
}
1064
if (!args || !*args)
1065
{
1066
if (verbose)
1067
bitchsay("No such Numeric Fset %d", num);
1068
return;
1069
}
1070
tmp = (FsetNumber *) new_malloc(sizeof(FsetNumber));
1071
tmp->numeric = num;
1072
tmp->format = m_strdup(args);
1073
add_to_list_ext((List **)&numeric_fset, (List *)tmp, compare_number);
1074
if (verbose)
1075
bitchsay("Added Numeric %d as %s", num, tmp->format);
1076
}
1077
1078
1079