diff options
author | michael <michael@82007160-df01-0410-b94d-b575c5fd34c7> | 2013-04-21 09:27:27 +0000 |
---|---|---|
committer | michael <michael@82007160-df01-0410-b94d-b575c5fd34c7> | 2013-04-21 09:27:27 +0000 |
commit | d3ba377982adb2fb5410445049aa39a0467eba11 (patch) | |
tree | 5cd52bec6919b82c549b61fb576341d27d59c960 /src/numeric.c | |
parent | 83c1f360e88ae7d06868f449901701f7acb98d4a (diff) |
- Remove current msg locale implementation
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/ircd-hybrid/trunk@1837 82007160-df01-0410-b94d-b575c5fd34c7
Diffstat (limited to 'src/numeric.c')
-rw-r--r-- | src/numeric.c | 1197 |
1 files changed, 1010 insertions, 187 deletions
diff --git a/src/numeric.c b/src/numeric.c index 21c574e..16d94d8 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -23,205 +23,1028 @@ */ #include "stdinc.h" - #include "numeric.h" -#include "irc_string.h" -#include "memory.h" -#include "log.h" -#include "send.h" -#include "client.h" -#include "messages.tab" -static char used_locale[LOCALE_LENGTH] = "standard"; + +static const char *replies[] = { +/* 000 */ NULL, +/* 001 RPL_WELCOME */ ":%s 001 %s :Welcome to the %s Internet Relay Chat Network %s", +/* 002 RPL_YOURHOST */ ":%s 002 %s :Your host is %s, running version %s", +/* 003 RPL_CREATED */ ":%s 003 %s :This server was created %s", +/* 004 RPL_MYINFO */ ":%s 004 %s %s %s %s biklmnoprstveIORS bkloveI", +/* 005 RPL_ISUPPORT */ ":%s 005 %s %s :are supported by this server", +/* 006 */ NULL, +/* 007 */ NULL, +/* 008 */ NULL, +/* 009 */ NULL, +/* 010 RPL_REDIR */ ":%s 010 %s %s %d :Please use this Server/Port instead", +/* 011 */ NULL, +/* 012 */ NULL, +/* 013 */ NULL, +/* 014 */ NULL, +/* 015 RPL_MAP */ ":%s 015 %s :%s", +/* 016 */ NULL, +/* 017 RPL_MAPEND */ ":%s 017 %s :End of /MAP", +/* 018 */ NULL, +/* 019 */ NULL, +/* 020 */ NULL, +/* 021 */ NULL, +/* 022 */ NULL, +/* 023 */ NULL, +/* 024 */ NULL, +/* 025 */ NULL, +/* 026 */ NULL, +/* 027 */ NULL, +/* 028 */ NULL, +/* 029 */ NULL, +/* 030 */ NULL, +/* 031 */ NULL, +/* 032 */ NULL, +/* 033 */ NULL, +/* 034 */ NULL, +/* 035 */ NULL, +/* 036 */ NULL, +/* 037 */ NULL, +/* 038 */ NULL, +/* 039 */ NULL, +/* 040 */ NULL, +/* 041 */ NULL, +/* 042 RPL_YOURID */ ":%s 042 %s %s :your unique ID", +/* 043 */ NULL, +/* 044 */ NULL, +/* 045 */ NULL, +/* 046 */ NULL, +/* 047 */ NULL, +/* 048 */ NULL, +/* 049 */ NULL, +/* 050 */ NULL, +/* 051 */ NULL, +/* 052 */ NULL, +/* 053 */ NULL, +/* 054 */ NULL, +/* 055 */ NULL, +/* 056 */ NULL, +/* 057 */ NULL, +/* 058 */ NULL, +/* 059 */ NULL, +/* 060 */ NULL, +/* 061 */ NULL, +/* 062 */ NULL, +/* 063 */ NULL, +/* 064 */ NULL, +/* 065 */ NULL, +/* 066 */ NULL, +/* 067 */ NULL, +/* 068 */ NULL, +/* 069 */ NULL, +/* 070 */ NULL, +/* 071 */ NULL, +/* 072 */ NULL, +/* 073 */ NULL, +/* 074 */ NULL, +/* 075 */ NULL, +/* 076 */ NULL, +/* 077 */ NULL, +/* 078 */ NULL, +/* 079 */ NULL, +/* 080 */ NULL, +/* 081 */ NULL, +/* 082 */ NULL, +/* 083 */ NULL, +/* 084 */ NULL, +/* 085 */ NULL, +/* 086 */ NULL, +/* 087 */ NULL, +/* 088 */ NULL, +/* 089 */ NULL, +/* 090 */ NULL, +/* 091 */ NULL, +/* 092 */ NULL, +/* 093 */ NULL, +/* 094 */ NULL, +/* 095 */ NULL, +/* 096 */ NULL, +/* 097 */ NULL, +/* 098 */ NULL, +/* 099 */ NULL, +/* 100 */ NULL, +/* 101 */ NULL, +/* 102 */ NULL, +/* 103 */ NULL, +/* 104 */ NULL, +/* 105 */ NULL, +/* 106 */ NULL, +/* 107 */ NULL, +/* 108 */ NULL, +/* 109 */ NULL, +/* 110 */ NULL, +/* 111 */ NULL, +/* 112 */ NULL, +/* 113 */ NULL, +/* 114 */ NULL, +/* 115 */ NULL, +/* 116 */ NULL, +/* 117 */ NULL, +/* 118 */ NULL, +/* 119 */ NULL, +/* 120 */ NULL, +/* 121 */ NULL, +/* 122 */ NULL, +/* 123 */ NULL, +/* 124 */ NULL, +/* 125 */ NULL, +/* 126 */ NULL, +/* 127 */ NULL, +/* 128 */ NULL, +/* 129 */ NULL, +/* 130 */ NULL, +/* 131 */ NULL, +/* 132 */ NULL, +/* 133 */ NULL, +/* 134 */ NULL, +/* 135 */ NULL, +/* 136 */ NULL, +/* 137 */ NULL, +/* 138 */ NULL, +/* 139 */ NULL, +/* 140 */ NULL, +/* 141 */ NULL, +/* 142 */ NULL, +/* 143 */ NULL, +/* 144 */ NULL, +/* 145 */ NULL, +/* 146 */ NULL, +/* 147 */ NULL, +/* 148 */ NULL, +/* 149 */ NULL, +/* 150 */ NULL, +/* 151 */ NULL, +/* 152 */ NULL, +/* 153 */ NULL, +/* 154 */ NULL, +/* 155 */ NULL, +/* 156 */ NULL, +/* 157 */ NULL, +/* 158 */ NULL, +/* 159 */ NULL, +/* 160 */ NULL, +/* 161 */ NULL, +/* 162 */ NULL, +/* 163 */ NULL, +/* 164 */ NULL, +/* 165 */ NULL, +/* 166 */ NULL, +/* 167 */ NULL, +/* 168 */ NULL, +/* 169 */ NULL, +/* 170 */ NULL, +/* 171 */ NULL, +/* 172 */ NULL, +/* 173 */ NULL, +/* 174 */ NULL, +/* 175 */ NULL, +/* 176 */ NULL, +/* 177 */ NULL, +/* 178 */ NULL, +/* 179 */ NULL, +/* 180 */ NULL, +/* 181 */ NULL, +/* 182 */ NULL, +/* 183 */ NULL, +/* 184 */ NULL, +/* 185 */ NULL, +/* 186 */ NULL, +/* 187 */ NULL, +/* 188 */ NULL, +/* 189 */ NULL, +/* 190 */ NULL, +/* 191 */ NULL, +/* 192 */ NULL, +/* 193 */ NULL, +/* 194 */ NULL, +/* 195 */ NULL, +/* 196 */ NULL, +/* 197 */ NULL, +/* 198 */ NULL, +/* 199 */ NULL, +/* 200 RPL_TRACELINK */ ":%s 200 %s Link %s %s %s", +/* 201 RPL_TRACECONNECTING */ ":%s 201 %s Try. %s %s", +/* 202 RPL_TRACEHANDSHAKE */ ":%s 202 %s H.S. %s %s", +/* 203 RPL_TRACEUNKNOWN */ ":%s 203 %s ???? %s %s (%s) %d", +/* 204 RPL_TRACEOPERATOR */ ":%s 204 %s Oper %s %s (%s) %lu %lu", +/* 205 RPL_TRACEUSER */ ":%s 205 %s User %s %s (%s) %lu %lu", +/* 206 RPL_TRACESERVER */ ":%s 206 %s Serv %s %dS %dC %s %s!%s@%s %lu", +/* 207 */ NULL, +/* 208 RPL_TRACENEWTYPE */ ":%s 208 %s <newtype> 0 %s", +/* 209 RPL_TRACECLASS */ ":%s 209 %s Class %s %d", +/* 210 */ NULL, +/* 211 RPL_STATSLINKINFO */ ":%s 211 %s %s %u %u %llu %u %llu :%u %u %s", +/* 212 RPL_STATSCOMMANDS */ ":%s 212 %s %s %u %llu :%u", +/* 213 RPL_STATSCLINE */ ":%s 213 %s %c %s %s %s %d %s", +/* 214 RPL_STATSNLINE */ ":%s 214 %s %c %s * %s %d %s", +/* 215 RPL_STATSILINE */ ":%s 215 %s %c %s * %s@%s %d %s", +/* 216 RPL_STATSKLINE */ ":%s 216 %s %s %s * %s :%s", +/* 217 RPL_STATSQLINE */ ":%s 217 %s %c %u %s :%s", +/* 218 RPL_STATSYLINE */ ":%s 218 %s %c %s %u %u %u %u %u %u %u/%u %u/%u %s", +/* 219 RPL_ENDOFSTATS */ ":%s 219 %s %c :End of /STATS report", +/* 220 RPL_STATSPLINE */ ":%s 220 %s %c %d %s %d %s :%s", +/* 221 RPL_UMODEIS */ ":%s 221 %s %s", +/* 222 */ NULL, +/* 223 */ NULL, +/* 224 */ NULL, +/* 225 RPL_STATSDLINE */ ":%s 225 %s %c %s :%s", +/* 226 RPL_STATSALINE */ ":%s 226 %s %s", +/* 227 */ NULL, +/* 228 */ NULL, +/* 229 */ NULL, +/* 230 */ NULL, +/* 231 */ NULL, +/* 232 */ NULL, +/* 233 */ NULL, +/* 234 */ NULL, +/* 235 */ NULL, +/* 236 */ NULL, +/* 237 */ NULL, +/* 238 */ NULL, +/* 239 */ NULL, +/* 240 */ NULL, +/* 241 RPL_STATSLLINE */ ":%s 241 %s %c %s * %s %d %s", +/* 242 RPL_STATSUPTIME */ ":%s 242 %s :Server Up %d days, %d:%02d:%02d", +/* 243 RPL_STATSOLINE */ ":%s 243 %s %c %s@%s * %s %s %s", +/* 244 RPL_STATSHLINE */ ":%s 244 %s %c %s * %s %d %s", +/* 245 */ NULL, +/* 246 RPL_STATSSERVICE */ ":%s 246 %s %c %s * %s %d %d", +/* 247 RPL_STATSXLINE */ ":%s 247 %s %s %d %s :%s", +/* 248 RPL_STATSULINE */ ":%s 248 %s U %s %s@%s %s", +/* 249 */ NULL, +/* 250 RPL_STATSCONN */ ":%s 250 %s :Highest connection count: %d (%d clients) (%llu connections received)", +/* 251 RPL_LUSERCLIENT */ ":%s 251 %s :There are %d users and %d invisible on %d servers", +/* 252 RPL_LUSEROP */ ":%s 252 %s %d :IRC Operators online", +/* 253 RPL_LUSERUNKNOWN */ ":%s 253 %s %d :unknown connection(s)", +/* 254 RPL_LUSERCHANNELS */ ":%s 254 %s %d :channels formed", +/* 255 RPL_LUSERME */ ":%s 255 %s :I have %d clients and %d servers", +/* 256 RPL_ADMINME */ ":%s 256 %s :Administrative info about %s", +/* 257 RPL_ADMINLOC1 */ ":%s 257 %s :%s", +/* 258 RPL_ADMINLOC2 */ ":%s 258 %s :%s", +/* 259 RPL_ADMINEMAIL */ ":%s 259 %s :%s", +/* 260 */ NULL, +/* 261 */ NULL, +/* 262 RPL_ENDOFTRACE */ ":%s 262 %s %s :End of TRACE", +/* 263 RPL_LOAD2HI */ ":%s 263 %s :Server load is temporarily too heavy. Please wait a while and try again.", +/* 264 */ NULL, +/* 265 RPL_LOCALUSERS */ ":%s 265 %s :Current local users: %d Max: %d", +/* 266 RPL_GLOBALUSERS */ ":%s 266 %s :Current global users: %d Max: %d", +/* 267 */ NULL, +/* 268 */ NULL, +/* 269 */ NULL, +/* 270 */ NULL, +/* 271 */ NULL, +/* 272 */ NULL, +/* 273 */ NULL, +/* 274 */ NULL, +/* 275 */ NULL, +/* 276 */ NULL, +/* 277 */ NULL, +/* 278 */ NULL, +/* 279 */ NULL, +/* 280 */ NULL, +/* 281 RPL_ACCEPTLIST */ ":%s 281 %s :%s", +/* 282 RPL_ENDOFACCEPT */ ":%s 282 %s :End of /ACCEPT list.", +/* 283 */ NULL, +/* 284 */ NULL, +/* 285 */ NULL, +/* 286 */ NULL, +/* 287 */ NULL, +/* 288 */ NULL, +/* 289 */ NULL, +/* 290 */ NULL, +/* 291 */ NULL, +/* 292 */ NULL, +/* 293 */ NULL, +/* 294 */ NULL, +/* 295 */ NULL, +/* 296 */ NULL, +/* 297 */ NULL, +/* 298 */ NULL, +/* 299 */ NULL, +/* 300 */ NULL, +/* 301 RPL_AWAY */ ":%s 301 %s %s :%s", +/* 302 RPL_USERHOST */ ":%s 302 %s :%s", +/* 303 RPL_ISON */ ":%s 303 %s :", +/* 304 */ NULL, +/* 305 RPL_UNAWAY */ ":%s 305 %s :You are no longer marked as being away", +/* 306 RPL_NOWAWAY */ ":%s 306 %s :You have been marked as being away", +/* 307 RPL_WHOISREGNICK */ ":%s 307 %s %s :has identified for this nick", +/* 308 RPL_WHOISADMIN */ ":%s 313 %s %s :is a Server Administrator", +/* 309 */ NULL, +/* 310 */ NULL, +/* 311 RPL_WHOISUSER */ ":%s 311 %s %s %s %s * :%s", +/* 312 RPL_WHOISSERVER */ ":%s 312 %s %s %s :%s", +/* 313 RPL_WHOISOPERATOR */ ":%s 313 %s %s :is an IRC Operator", +/* 314 RPL_WHOWASUSER */ ":%s 314 %s %s %s %s * :%s", +/* 315 RPL_ENDOFWHO */ ":%s 315 %s %s :End of /WHO list.", +/* 316 */ NULL, +/* 317 RPL_WHOISIDLE */ ":%s 317 %s %s %u %d :seconds idle, signon time", +/* 318 RPL_ENDOFWHOIS */ ":%s 318 %s %s :End of /WHOIS list.", +/* 319 RPL_WHOISCHANNELS */ ":%s 319 %s %s :%s", +/* 320 */ NULL, +/* 321 RPL_LISTSTART */ ":%s 321 %s Channel :Users Name", +/* 322 RPL_LIST */ ":%s 322 %s %s %d :%s", +/* 323 RPL_LISTEND */ ":%s 323 %s :End of /LIST", +/* 324 RPL_CHANNELMODEIS */ ":%s 324 %s %s %s %s", +/* 325 */ NULL, +/* 326 */ NULL, +/* 327 */ NULL, +/* 328 */ NULL, +/* 329 RPL_CREATIONTIME */ ":%s 329 %s %s %lu", +/* 330 */ NULL, +/* 331 RPL_NOTOPIC */ ":%s 331 %s %s :No topic is set.", +/* 332 RPL_TOPIC */ ":%s 332 %s %s :%s", +/* 333 RPL_TOPICWHOTIME */ ":%s 333 %s %s %s %lu", +/* 334 */ NULL, +/* 335 */ NULL, +/* 336 */ NULL, +/* 337 */ NULL, +/* 338 RPL_WHOISACTUALLY */ ":%s 338 %s %s %s :actually using host", +/* 339 */ NULL, +/* 340 */ NULL, +/* 341 RPL_INVITING */ ":%s 341 %s %s %s", +/* 342 */ NULL, +/* 343 */ NULL, +/* 344 */ NULL, +/* 345 */ NULL, +/* 346 RPL_INVEXLIST */ ":%s 346 %s %s %s!%s@%s %s %lu", +/* 347 RPL_ENDOFINVEXLIST */ ":%s 347 %s %s :End of Channel Invite List", +/* 348 RPL_EXCEPTLIST */ ":%s 348 %s %s %s!%s@%s %s %lu", +/* 349 RPL_ENDOFEXCEPTLIST */ ":%s 349 %s %s :End of Channel Exception List", +/* 350 */ NULL, +/* 351 RPL_VERSION */ ":%s 351 %s %s(%s). %s :%s%s", +/* 352 RPL_WHOREPLY */ ":%s 352 %s %s %s %s %s %s %s :%d %s", +/* 353 RPL_NAMREPLY */ ":%s 353 %s %s %s :", +/* 354 */ NULL, +/* 355 */ NULL, +/* 356 */ NULL, +/* 357 */ NULL, +/* 358 */ NULL, +/* 359 */ NULL, +/* 360 */ NULL, +/* 361 */ NULL, +/* 362 RPL_CLOSING */ ":%s 362 %s %s :Closed. Status = %d", +/* 363 RPL_CLOSEEND */ ":%s 363 %s %d: Connections Closed", +/* 364 RPL_LINKS */ ":%s 364 %s %s %s :%d %s", +/* 365 RPL_ENDOFLINKS */ ":%s 365 %s %s :End of /LINKS list.", +/* 366 RPL_ENDOFNAMES */ ":%s 366 %s %s :End of /NAMES list.", +/* 367 RPL_BANLIST */ ":%s 367 %s %s %s!%s@%s %s %lu", +/* 368 RPL_ENDOFBANLIST */ ":%s 368 %s %s :End of Channel Ban List", +/* 369 RPL_ENDOFWHOWAS */ ":%s 369 %s %s :End of WHOWAS", +/* 370 */ NULL, +/* 371 RPL_INFO */ ":%s 371 %s :%s", +/* 372 RPL_MOTD */ ":%s 372 %s :- %s", +/* 373 RPL_INFOSTART */ ":%s 373 %s :Server INFO", +/* 374 RPL_ENDOFINFO */ ":%s 374 %s :End of /INFO list.", +/* 375 RPL_MOTDSTART */ ":%s 375 %s :- %s Message of the Day - ", +/* 376 RPL_ENDOFMOTD */ ":%s 376 %s :End of /MOTD command.", +/* 377 */ NULL, +/* 378 */ NULL, +/* 379 */ NULL, +/* 380 */ NULL, +/* 381 RPL_YOUREOPER */ ":%s 381 %s :You have entered... the Twilight Zone!", +/* 382 RPL_REHASHING */ ":%s 382 %s %s :Rehashing", +/* 383 */ NULL, +/* 384 */ NULL, +/* 385 */ NULL, +/* 386 */ NULL, +/* 387 */ NULL, +/* 388 */ NULL, +/* 389 */ NULL, +/* 390 */ NULL, +/* 391 RPL_TIME */ ":%s 391 %s %s :%s", +/* 392 */ NULL, +/* 393 */ NULL, +/* 394 */ NULL, +/* 395 */ NULL, +/* 396 */ NULL, +/* 397 */ NULL, +/* 398 */ NULL, +/* 399 */ NULL, +/* 400 */ NULL, +/* 401 ERR_NOSUCHNICK */ ":%s 401 %s %s :No such nick/channel", +/* 402 ERR_NOSUCHSERVER */ ":%s 402 %s %s :No such server", +/* 403 ERR_NOSUCHCHANNEL */ ":%s 403 %s %s :No such channel", +/* 404 ERR_CANNOTSENDTOCHAN */ ":%s 404 %s %s :Cannot send to channel", +/* 405 ERR_TOOMANYCHANNELS */ ":%s 405 %s %s :You have joined too many channels", +/* 406 ERR_WASNOSUCHNICK */ ":%s 406 %s %s :There was no such nickname", +/* 407 ERR_TOOMANYTARGETS */ ":%s 407 %s %s :Too many recipients. Only %d processed", +/* 408 */ NULL, +/* 409 ERR_NOORIGIN */ ":%s 409 %s :No origin specified", +/* 410 ERR_INVALIDCAPCMD */ ":%s 410 %s %s :Invalid CAP subcommand", +/* 411 ERR_NORECIPIENT */ ":%s 411 %s :No recipient given (%s)", +/* 412 ERR_NOTEXTTOSEND */ ":%s 412 %s :No text to send", +/* 413 ERR_NOTOPLEVEL */ ":%s 413 %s %s :No toplevel domain specified", +/* 414 ERR_WILDTOPLEVEL */ ":%s 414 %s %s :Wildcard in toplevel Domain", +/* 415 */ NULL, +/* 416 */ NULL, +/* 417 */ NULL, +/* 418 */ NULL, +/* 419 */ NULL, +/* 420 */ NULL, +/* 421 ERR_UNKNOWNCOMMAND */ ":%s 421 %s %s :Unknown command", +/* 422 ERR_NOMOTD */ ":%s 422 %s :MOTD File is missing", +/* 423 ERR_NOADMININFO */ ":%s 423 %s %s :No administrative info available", +/* 424 */ NULL, +/* 425 */ NULL, +/* 426 */ NULL, +/* 427 */ NULL, +/* 428 */ NULL, +/* 429 */ NULL, +/* 430 */ NULL, +/* 431 ERR_NONICKNAMEGIVEN */ ":%s 431 %s :No nickname given", +/* 432 ERR_ERRONEUSNICKNAME */ ":%s 432 %s %s :Erroneous Nickname", +/* 433 ERR_NICKNAMEINUSE */ ":%s 433 %s %s :Nickname is already in use.", +/* 434 */ NULL, +/* 435 */ NULL, +/* 436 ERR_NICKCOLLISION */ ":%s 436 %s %s :Nickname collision KILL", +/* 437 ERR_UNAVAILRESOURCE */ ":%s 437 %s %s :Nick/channel is temporarily unavailable", +/* 438 ERR_NICKTOOFAST */ ":%s 438 %s %s %s :Nick change too fast. Please wait %d seconds.", +/* 439 */ NULL, +/* 440 ERR_SERVICESDOWN */ ":%s 440 %s %s :Services is currently down.", +/* 441 ERR_USERNOTINCHANNEL */ ":%s 441 %s %s %s :They aren't on that channel", +/* 442 ERR_NOTONCHANNEL */ ":%s 442 %s %s :You're not on that channel", +/* 443 ERR_USERONCHANNEL */ ":%s 443 %s %s %s :is already on channel", +/* 444 */ NULL, +/* 445 */ NULL, +/* 446 */ NULL, +/* 447 */ NULL, +/* 448 */ NULL, +/* 449 */ NULL, +/* 450 */ NULL, +/* 451 ERR_NOTREGISTERED */ ":%s 451 %s :You have not registered", +/* 452 */ NULL, +/* 453 */ NULL, +/* 454 */ NULL, +/* 455 */ NULL, +/* 456 ERR_ACCEPTFULL */ ":%s 456 %s :Accept list is full", +/* 457 ERR_ACCEPTEXIST */ ":%s 457 %s %s!%s@%s :is already on your accept list", +/* 458 ERR_ACCEPTNOT */ ":%s 458 %s %s!%s@%s :is not on your accept list", +/* 459 */ NULL, +/* 460 */ NULL, +/* 461 ERR_NEEDMOREPARAMS */ ":%s 461 %s %s :Not enough parameters", +/* 462 ERR_ALREADYREGISTRED */ ":%s 462 %s :You may not reregister", +/* 463 */ NULL, +/* 464 ERR_PASSWDMISMATCH */ ":%s 464 %s :Password Incorrect", +/* 465 ERR_YOUREBANNEDCREEP */ ":%s 465 %s :You are banned from this server- %s", +/* 466 */ NULL, +/* 467 */ NULL, +/* 468 ERR_ONLYSERVERSCANCHANGE */ ":%s 468 %s %s :Only servers can change that mode", +/* 469 */ NULL, +/* 470 ERR_OPERONLYCHAN */ ":%s 470 %s %s :Cannot join channel (+O)", +/* 471 ERR_CHANNELISFULL */ ":%s 471 %s %s :Cannot join channel (+l)", +/* 472 ERR_UNKNOWNMODE */ ":%s 472 %s %c :is unknown mode char to me", +/* 473 ERR_INVITEONLYCHAN */ ":%s 473 %s %s :Cannot join channel (+i)", +/* 474 ERR_BANNEDFROMCHAN */ ":%s 474 %s %s :Cannot join channel (+b)", +/* 475 ERR_BADCHANNELKEY */ ":%s 475 %s %s :Cannot join channel (+k)", +/* 476 */ NULL, +/* 477 ERR_NEEDREGGEDNICK */ ":%s 477 %s %s :You need to identify to a registered nick to join or speak in that channel.", +/* 478 ERR_BANLISTFULL */ ":%s 478 %s %s %s :Channel ban list is full", +/* 479 ERR_BADCHANNAME */ ":%s 479 %s %s :Illegal channel name", +/* 480 ERR_SSLONLYCHAN */ ":%s 480 %s %s :Cannot join channel (+S)", +/* 481 ERR_NOPRIVILEGES */ ":%s 481 %s :Permission Denied - You're not an IRC operator", +/* 482 ERR_CHANOPRIVSNEEDED */ ":%s 482 %s %s :You're not channel operator", +/* 483 ERR_CANTKILLSERVER */ ":%s 483 %s :You can't kill a server!", +/* 484 ERR_RESTRICTED */ ":%s 484 %s :You are restricted", +/* 485 */ NULL, +/* 486 ERR_NONONREG */ ":%s 486 %s %s :You must identify to a registered nick to private message that person", +/* 487 */ NULL, +/* 488 */ NULL, +/* 489 */ NULL, +/* 490 */ NULL, +/* 491 ERR_NOOPERHOST */ ":%s 491 %s :Only few of mere mortals may try to enter the twilight zone", +/* 492 */ NULL, +/* 493 */ NULL, +/* 494 */ NULL, +/* 495 */ NULL, +/* 496 */ NULL, +/* 497 */ NULL, +/* 498 */ NULL, +/* 499 */ NULL, +/* 500 */ NULL, +/* 501 ERR_UMODEUNKNOWNFLAG */ ":%s 501 %s :Unknown MODE flag", +/* 502 ERR_USERSDONTMATCH */ ":%s 502 %s :Can't change mode for other users", +/* 503 ERR_GHOSTEDCLIENT */ ":%s 503 %s :Message could not be delivered to %s", +/* 504 ERR_USERNOTONSERV */ ":%s 504 %s %s :User is not on this server", +/* 505 */ NULL, +/* 506 */ NULL, +/* 507 */ NULL, +/* 508 */ NULL, +/* 509 */ NULL, +/* 510 */ NULL, +/* 511 */ NULL, +/* 512 ERR_TOOMANYWATCH */ ":%s 512 %s %s :Maximum size for WATCH-list is %d entries", +/* 513 ERR_WRONGPONG */ ":%s 513 %s :To connect type /QUOTE PONG %u", +/* 514 */ NULL, +/* 515 */ NULL, +/* 516 */ NULL, +/* 517 */ NULL, +/* 518 */ NULL, +/* 519 */ NULL, +/* 520 */ NULL, +/* 521 ERR_LISTSYNTAX */ ":%s 521 %s :Bad list syntax, type /QUOTE HELP LIST", +/* 522 */ NULL, +/* 523 */ NULL, +/* 524 ERR_HELPNOTFOUND */ ":%s 524 %s %s :Help not found", +/* 525 */ NULL, +/* 526 */ NULL, +/* 527 */ NULL, +/* 528 */ NULL, +/* 529 */ NULL, +/* 530 */ NULL, +/* 531 */ NULL, +/* 532 */ NULL, +/* 533 */ NULL, +/* 534 */ NULL, +/* 535 */ NULL, +/* 536 */ NULL, +/* 537 */ NULL, +/* 538 */ NULL, +/* 539 */ NULL, +/* 540 */ NULL, +/* 541 */ NULL, +/* 542 */ NULL, +/* 543 */ NULL, +/* 544 */ NULL, +/* 545 */ NULL, +/* 546 */ NULL, +/* 547 */ NULL, +/* 548 */ NULL, +/* 549 */ NULL, +/* 550 */ NULL, +/* 551 */ NULL, +/* 552 */ NULL, +/* 553 */ NULL, +/* 554 */ NULL, +/* 555 */ NULL, +/* 556 */ NULL, +/* 557 */ NULL, +/* 558 */ NULL, +/* 559 */ NULL, +/* 560 */ NULL, +/* 561 */ NULL, +/* 562 */ NULL, +/* 563 */ NULL, +/* 564 */ NULL, +/* 565 */ NULL, +/* 566 */ NULL, +/* 567 */ NULL, +/* 568 */ NULL, +/* 569 */ NULL, +/* 570 */ NULL, +/* 571 */ NULL, +/* 572 */ NULL, +/* 573 */ NULL, +/* 574 */ NULL, +/* 575 */ NULL, +/* 576 */ NULL, +/* 577 */ NULL, +/* 578 */ NULL, +/* 579 */ NULL, +/* 580 */ NULL, +/* 581 */ NULL, +/* 582 */ NULL, +/* 583 */ NULL, +/* 584 */ NULL, +/* 585 */ NULL, +/* 586 */ NULL, +/* 587 */ NULL, +/* 588 */ NULL, +/* 589 */ NULL, +/* 590 */ NULL, +/* 591 */ NULL, +/* 592 */ NULL, +/* 593 */ NULL, +/* 594 */ NULL, +/* 595 */ NULL, +/* 596 */ NULL, +/* 597 */ NULL, +/* 598 */ NULL, +/* 599 */ NULL, +/* 600 RPL_LOGON */ ":%s 600 %s %s %s %s %d :logged online", +/* 601 RPL_LOGOFF */ ":%s 601 %s %s %s %s %d :logged offline", +/* 602 RPL_WATCHOFF */ ":%s 602 %s %s %s %s %d :stopped watching", +/* 603 RPL_WATCHSTAT */ ":%s 603 %s :You have %u and are on %u WATCH entries", +/* 604 RPL_NOWON */ ":%s 604 %s %s %s %s %d :is online", +/* 605 RPL_NOWOFF */ ":%s 605 %s %s %s %s %d :is offline", +/* 606 RPL_WATCHLIST */ ":%s 606 %s :%s", +/* 607 RPL_ENDOFWATCHLIST */ ":%s 607 %s :End of WATCH %c", +/* 608 */ NULL, +/* 609 */ NULL, +/* 610 */ NULL, +/* 611 */ NULL, +/* 612 */ NULL, +/* 613 */ NULL, +/* 614 */ NULL, +/* 615 */ NULL, +/* 616 */ NULL, +/* 617 */ NULL, +/* 618 */ NULL, +/* 619 */ NULL, +/* 620 */ NULL, +/* 621 */ NULL, +/* 622 */ NULL, +/* 623 */ NULL, +/* 624 */ NULL, +/* 625 */ NULL, +/* 626 */ NULL, +/* 627 */ NULL, +/* 628 */ NULL, +/* 629 */ NULL, +/* 630 */ NULL, +/* 631 */ NULL, +/* 632 */ NULL, +/* 633 */ NULL, +/* 634 */ NULL, +/* 635 */ NULL, +/* 636 */ NULL, +/* 637 */ NULL, +/* 638 */ NULL, +/* 639 */ NULL, +/* 640 */ NULL, +/* 641 */ NULL, +/* 642 */ NULL, +/* 643 */ NULL, +/* 644 */ NULL, +/* 645 */ NULL, +/* 646 */ NULL, +/* 647 */ NULL, +/* 648 */ NULL, +/* 649 */ NULL, +/* 650 */ NULL, +/* 651 */ NULL, +/* 652 */ NULL, +/* 653 */ NULL, +/* 654 */ NULL, +/* 655 */ NULL, +/* 656 */ NULL, +/* 657 */ NULL, +/* 658 */ NULL, +/* 659 */ NULL, +/* 660 */ NULL, +/* 661 */ NULL, +/* 662 */ NULL, +/* 663 */ NULL, +/* 664 */ NULL, +/* 665 */ NULL, +/* 666 */ NULL, +/* 667 */ NULL, +/* 668 */ NULL, +/* 669 */ NULL, +/* 670 */ NULL, +/* 671 RPL_WHOISSECURE */ ":%s 671 %s %s :is connected via SSL (secure link)", +/* 672 */ NULL, +/* 673 */ NULL, +/* 674 */ NULL, +/* 675 */ NULL, +/* 676 */ NULL, +/* 677 */ NULL, +/* 678 */ NULL, +/* 679 */ NULL, +/* 680 */ NULL, +/* 681 */ NULL, +/* 682 */ NULL, +/* 683 */ NULL, +/* 684 */ NULL, +/* 685 */ NULL, +/* 686 */ NULL, +/* 687 */ NULL, +/* 688 */ NULL, +/* 689 */ NULL, +/* 690 */ NULL, +/* 691 */ NULL, +/* 692 */ NULL, +/* 693 */ NULL, +/* 694 */ NULL, +/* 695 */ NULL, +/* 696 */ NULL, +/* 697 */ NULL, +/* 698 */ NULL, +/* 699 */ NULL, +/* 700 */ NULL, +/* 701 */ NULL, +/* 702 RPL_MODLIST */ ":%s 702 %s %s %p %s %s", +/* 703 RPL_ENDOFMODLIST */ ":%s 703 %s :End of /MODLIST.", +/* 704 RPL_HELPSTART */ ":%s 704 %s %s :%s", +/* 705 RPL_HELPTXT */ ":%s 705 %s %s :%s", +/* 706 RPL_ENDOFHELP */ ":%s 706 %s %s :End of /HELP.", +/* 707 */ NULL, +/* 708 RPL_ETRACE_FULL */ ":%s 708 %s %s %s %s %s %s %s %s %s :%s", +/* 709 RPL_ETRACE */ ":%s 709 %s %s %s %s %s %s %s :%s", +/* 710 RPL_KNOCK */ ":%s 710 %s %s %s!%s@%s :has asked for an invite.", +/* 711 RPL_KNOCKDLVR */ ":%s 711 %s %s :Your KNOCK has been delivered.", +/* 712 ERR_TOOMANYKNOCK */ ":%s 712 %s %s :Too many KNOCKs (%s).", +/* 713 ERR_CHANOPEN */ ":%s 713 %s %s :Channel is open.", +/* 714 ERR_KNOCKONCHAN */ ":%s 714 %s %s :You are already on that channel.", +/* 715 */ NULL, +/* 716 RPL_TARGUMODEG */ ":%s 716 %s %s :is in +g mode (server side ignore)", +/* 717 RPL_TARGNOTIFY */ ":%s 717 %s %s :has been informed that you messaged them.", +/* 718 RPL_UMODEGMSG */ ":%s 718 %s %s :is messaging you, and you are umode +g.", +/* 719 */ NULL, +/* 720 */ NULL, +/* 721 */ NULL, +/* 722 */ NULL, +/* 723 ERR_NOPRIVS */ ":%s 723 %s %s :Insufficient oper privs.", +/* 724 RPL_TESTMASK */ ":%s 724 %s %s!%s@%s %u %u :Local/remote clients match.", +/* 725 RPL_TESTLINE */ ":%s 725 %s %c %ld %s :%s", +/* 726 RPL_NOTESTLINE */ ":%s 726 %s %s :No matches", +/* 727 */ NULL, +/* 728 */ NULL, +/* 729 */ NULL, +/* 730 */ NULL, +/* 731 */ NULL, +/* 732 */ NULL, +/* 733 */ NULL, +/* 734 */ NULL, +/* 735 */ NULL, +/* 736 */ NULL, +/* 737 */ NULL, +/* 738 */ NULL, +/* 739 */ NULL, +/* 740 */ NULL, +/* 741 */ NULL, +/* 742 */ NULL, +/* 743 */ NULL, +/* 744 */ NULL, +/* 745 */ NULL, +/* 746 */ NULL, +/* 747 */ NULL, +/* 748 */ NULL, +/* 749 */ NULL, +/* 750 */ NULL, +/* 751 */ NULL, +/* 752 */ NULL, +/* 753 */ NULL, +/* 754 */ NULL, +/* 755 */ NULL, +/* 756 */ NULL, +/* 757 */ NULL, +/* 758 */ NULL, +/* 759 */ NULL, +/* 760 */ NULL, +/* 761 */ NULL, +/* 762 */ NULL, +/* 763 */ NULL, +/* 764 */ NULL, +/* 765 */ NULL, +/* 766 */ NULL, +/* 767 */ NULL, +/* 768 */ NULL, +/* 769 */ NULL, +/* 770 */ NULL, +/* 771 */ NULL, +/* 772 */ NULL, +/* 773 */ NULL, +/* 774 */ NULL, +/* 775 */ NULL, +/* 776 */ NULL, +/* 777 */ NULL, +/* 778 */ NULL, +/* 779 */ NULL, +/* 780 */ NULL, +/* 781 */ NULL, +/* 782 */ NULL, +/* 783 */ NULL, +/* 784 */ NULL, +/* 785 */ NULL, +/* 786 */ NULL, +/* 787 */ NULL, +/* 788 */ NULL, +/* 789 */ NULL, +/* 790 */ NULL, +/* 791 */ NULL, +/* 792 */ NULL, +/* 793 */ NULL, +/* 794 */ NULL, +/* 795 */ NULL, +/* 796 */ NULL, +/* 797 */ NULL, +/* 798 */ NULL, +/* 799 */ NULL, +/* 800 */ NULL, +/* 801 */ NULL, +/* 802 */ NULL, +/* 803 */ NULL, +/* 804 */ NULL, +/* 805 */ NULL, +/* 806 */ NULL, +/* 807 */ NULL, +/* 808 */ NULL, +/* 809 */ NULL, +/* 810 */ NULL, +/* 811 */ NULL, +/* 812 */ NULL, +/* 813 */ NULL, +/* 814 */ NULL, +/* 815 */ NULL, +/* 816 */ NULL, +/* 817 */ NULL, +/* 818 */ NULL, +/* 819 */ NULL, +/* 820 */ NULL, +/* 821 */ NULL, +/* 822 */ NULL, +/* 823 */ NULL, +/* 824 */ NULL, +/* 825 */ NULL, +/* 826 */ NULL, +/* 827 */ NULL, +/* 828 */ NULL, +/* 829 */ NULL, +/* 830 */ NULL, +/* 831 */ NULL, +/* 832 */ NULL, +/* 833 */ NULL, +/* 834 */ NULL, +/* 835 */ NULL, +/* 836 */ NULL, +/* 837 */ NULL, +/* 838 */ NULL, +/* 839 */ NULL, +/* 840 */ NULL, +/* 841 */ NULL, +/* 842 */ NULL, +/* 843 */ NULL, +/* 844 */ NULL, +/* 845 */ NULL, +/* 846 */ NULL, +/* 847 */ NULL, +/* 848 */ NULL, +/* 849 */ NULL, +/* 850 */ NULL, +/* 851 */ NULL, +/* 852 */ NULL, +/* 853 */ NULL, +/* 854 */ NULL, +/* 855 */ NULL, +/* 856 */ NULL, +/* 857 */ NULL, +/* 858 */ NULL, +/* 859 */ NULL, +/* 860 */ NULL, +/* 861 */ NULL, +/* 862 */ NULL, +/* 863 */ NULL, +/* 864 */ NULL, +/* 865 */ NULL, +/* 866 */ NULL, +/* 867 */ NULL, +/* 868 */ NULL, +/* 869 */ NULL, +/* 870 */ NULL, +/* 871 */ NULL, +/* 872 */ NULL, +/* 873 */ NULL, +/* 874 */ NULL, +/* 875 */ NULL, +/* 876 */ NULL, +/* 877 */ NULL, +/* 878 */ NULL, +/* 879 */ NULL, +/* 880 */ NULL, +/* 881 */ NULL, +/* 882 */ NULL, +/* 883 */ NULL, +/* 884 */ NULL, +/* 885 */ NULL, +/* 886 */ NULL, +/* 887 */ NULL, +/* 888 */ NULL, +/* 889 */ NULL, +/* 890 */ NULL, +/* 891 */ NULL, +/* 892 */ NULL, +/* 893 */ NULL, +/* 894 */ NULL, +/* 895 */ NULL, +/* 896 */ NULL, +/* 897 */ NULL, +/* 898 */ NULL, +/* 899 */ NULL, +/* 900 */ NULL, +/* 901 */ NULL, +/* 902 */ NULL, +/* 903 */ NULL, +/* 904 */ NULL, +/* 905 */ NULL, +/* 906 */ NULL, +/* 907 */ NULL, +/* 908 */ NULL, +/* 909 */ NULL, +/* 910 */ NULL, +/* 911 */ NULL, +/* 912 */ NULL, +/* 913 */ NULL, +/* 914 */ NULL, +/* 915 */ NULL, +/* 916 */ NULL, +/* 917 */ NULL, +/* 918 */ NULL, +/* 919 */ NULL, +/* 920 */ NULL, +/* 921 */ NULL, +/* 922 */ NULL, +/* 923 */ NULL, +/* 924 */ NULL, +/* 925 */ NULL, +/* 926 */ NULL, +/* 927 */ NULL, +/* 928 */ NULL, +/* 929 */ NULL, +/* 930 */ NULL, +/* 931 */ NULL, +/* 932 */ NULL, +/* 933 */ NULL, +/* 934 */ NULL, +/* 935 */ NULL, +/* 936 */ NULL, +/* 937 */ NULL, +/* 938 */ NULL, +/* 939 */ NULL, +/* 940 */ NULL, +/* 941 */ NULL, +/* 942 */ NULL, +/* 943 */ NULL, +/* 944 */ NULL, +/* 945 */ NULL, +/* 946 */ NULL, +/* 947 */ NULL, +/* 948 */ NULL, +/* 949 */ NULL, +/* 950 */ NULL, +/* 951 */ NULL, +/* 952 */ NULL, +/* 953 */ NULL, +/* 954 */ NULL, +/* 955 */ NULL, +/* 956 */ NULL, +/* 957 */ NULL, +/* 958 */ NULL, +/* 959 */ NULL, +/* 960 */ NULL, +/* 961 */ NULL, +/* 962 */ NULL, +/* 963 */ NULL, +/* 964 */ NULL, +/* 965 */ NULL, +/* 966 */ NULL, +/* 967 */ NULL, +/* 968 */ NULL, +/* 969 */ NULL, +/* 970 */ NULL, +/* 971 */ NULL, +/* 972 */ NULL, +/* 973 */ NULL, +/* 974 */ NULL, +/* 975 */ NULL, +/* 976 */ NULL, +/* 977 */ NULL, +/* 978 */ NULL, +/* 979 */ NULL, +/* 980 */ NULL, +/* 981 */ NULL, +/* 982 */ NULL, +/* 983 */ NULL, +/* 984 */ NULL, +/* 985 */ NULL, +/* 986 */ NULL, +/* 987 */ NULL, +/* 988 */ NULL, +/* 989 */ NULL, +/* 990 */ NULL, +/* 991 */ NULL, +/* 992 */ NULL, +/* 993 */ NULL, +/* 994 */ NULL, +/* 995 */ NULL, +/* 996 */ NULL, +/* 997 */ NULL, +/* 998 */ NULL, +/* 999 ERR_LAST_ERR_MSG */ ":%s 999 %s :Last Error Message" +}; /* * form_str * - * inputs - numeric - * output - corresponding string - * side effects - NONE + * inputs - numeric + * output - corresponding string + * side effects - NONE */ -const char* form_str(int numeric) +const char * +form_str(unsigned int numeric) { - assert(-1 < numeric); assert(numeric < ERR_LAST_ERR_MSG); if (numeric > ERR_LAST_ERR_MSG) numeric = ERR_LAST_ERR_MSG; - if (numeric < 0) - numeric = ERR_LAST_ERR_MSG; - - assert(replies[numeric].standard != NULL); - - return (replies[numeric].translated != NULL ? replies[numeric].translated : - replies[numeric].standard); -} - -/* Attempts to change a numeric with index "reply" to "new_reply". - * Returns 1 if ok, 0 otherwise. - */ -static int -change_reply(const char *locale, int linecnt, int reply, char *new_reply) -{ - int found; - char *new = new_reply; - const char *old = replies[reply].standard; - - for (; *new; new++) - { - if (*new == '%') - { - if (!*++new) break; - if (*new != '%') - { - /* We've just found a format symbol. Check if it is the next format - * symbol in the original reply. - */ - for (; *new >= '0' && *new <= '9'; new++); /* skip size prefix */ - found = 0; - for (; *old; old++) - { - if (*old == '%') - { - if (!*++old) break; /* shouldn't happen */ - if (*old != '%') - { - for (; *old >= '0' && *old <= '9'; old++); /* skip size prefix */ - if (*new != *old++) - { - ilog(LOG_TYPE_IRCD, "Incompatible format symbols (%s.lang, %d)", - locale, linecnt); - return 0; - } - found = 1; - break; - } - } - } - if (!found) - { - ilog(LOG_TYPE_IRCD, "Too many format symbols (%s.lang, %d)", locale, linecnt); - return(0); - } - } - } - } - - MyFree(replies[reply].translated); - replies[reply].translated = xstrdup(new_reply); - return(1); -} - -/* Loads a language file. Errors are logged into the log file. */ -void -set_locale(const char *locale) -{ - int i, res = 1, linecnt = 0; - char buffer[IRCD_BUFSIZE + 1]; - char *ident, *reply; - FILE *f; - - /* Restore standard replies */ - for (i = 0; i <= ERR_LAST_ERR_MSG; i++) /* 0 isn't a magic number! ;> */ - { - if (replies[i].translated != NULL) - { - MyFree(replies[i].translated); - replies[i].translated = NULL; - } - } - - if (strchr(locale, '/') != NULL) - { - strlcpy(used_locale, "standard", sizeof(used_locale)); /* XXX paranoid */ - return; - } - - /* yes, I know - the slash isn't necessary. But I have to be sure - * that it'll work even if some lame admin won't put "/" at the end - * of MSGPATH. - */ - snprintf(buffer, sizeof(buffer), "%s/%s.lang", MSGPATH, locale); - if ((f = fopen(buffer, "r")) == NULL) - { - strlcpy(used_locale, "standard", sizeof(used_locale)); /* XXX */ - return; - } - - /* Process the language file */ - while (fgets(buffer, sizeof(buffer), f)) - { - ++linecnt; - if (buffer[0] == ';') - continue; /* that's a comment */ - - if ((ident = strpbrk(buffer, "\r\n")) != NULL) - *ident = '\0'; - - /* skip spaces if there are any */ - for (ident = buffer; *ident == ' ' || *ident == '\t'; ident++)/* null */; - if (*ident == '\0') - continue; /* empty line */ - /* skip after the reply identificator */ - for (reply = ident; *reply != ' ' && *reply != '\t' && *reply != ':'; - reply++) - if (*reply == '\0') goto error; + assert(replies[numeric]); - if (*reply == ' ' || *reply == '\t') - { - for (*reply++ = '\0'; *reply == ' ' || *reply == '\t'; reply++); - if (*reply != ':') - { - error: - ilog(LOG_TYPE_IRCD, "Invalid line in language file (%s.lang, %d)", - locale, linecnt); - res = 0; - continue; - } - } - else - *reply++ = '\0'; - if (*ident == '\0') - goto error; - - /* skip to the beginning of reply */ - while (*reply == ' ' || *reply == '\t') reply++; - if (*reply == '\0') - goto error; - - for (i = 0; i <= ERR_LAST_ERR_MSG; i++) - { - if (replies[i].name != NULL) - { - if (irccmp(replies[i].name, ident) == 0) - { - if (!change_reply(locale, linecnt, i, reply)) res = 0; - i = -1; - break; - } - } - } - if (i != -1) - { - ilog(LOG_TYPE_IRCD, - "Unknown numeric %s (%s.lang, %d)", ident, locale, linecnt); - res = 0; - } - } - fclose(f); - - strlcpy(used_locale, locale, sizeof(used_locale)); - if (!res) - sendto_realops_flags(UMODE_ALL, L_ADMIN, SEND_NOTICE, - "Language file [%s] contains " - "errors, check server log file for more details", - used_locale); -} - -/* Returns the name of current locale. */ -const char * -get_locale(void) -{ - return used_locale; + return replies[numeric]; } |