rearranged NeonServ code to be modular
[NeonServV5.git] / src / lang.c
index f984bf8f58ac63c194765b780aff6007fb9063a6..b56322ce2e4421c7201e6d32732ba1a882d831ed 100644 (file)
@@ -1,5 +1,5 @@
-/* lang.c - NeonServ v5.1
- * Copyright (C) 2011  Philipp Kreil (pk910)
+/* lang.c - NeonServ v5.3
+ * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -135,13 +135,18 @@ void register_default_language_table(const struct default_language_entry *msgtab
 
 void register_language_string(struct language *lang, char *ident, char *text) {
     int cindex = get_entry_index(ident);
-    struct language_table *lang_entry = malloc(sizeof(*lang_entry));
-    if (!lang_entry) {
-        perror("malloc() failed");
-        return;
+    struct language_table *lang_entry;
+    for(lang_entry = lang->entrys[cindex]; lang_entry; lang_entry = lang_entry->next) {
+        if(!strcmp(lang_entry->ident, ident)) break;
+    }
+    if(!lang_entry) {
+        lang_entry = malloc(sizeof(*lang_entry));
+        if (!lang_entry) {
+            perror("malloc() failed");
+            return;
+        }
+        lang_entry->ident = strdup(ident);
     }
-    
-    lang_entry->ident = strdup(ident);
     //replace all:
     //$b to \002
     //$k to \003
@@ -157,10 +162,13 @@ void register_language_string(struct language *lang, char *ident, char *text) {
         if(a) {
             switch(a[1]) {
                 case 'b':
-                    tmp[tmppos++] = '\002';
+                    tmp[tmppos++] = 2;
                     break;
                 case 'k':
-                    tmp[tmppos++] = '\003';
+                    tmp[tmppos++] = 3;
+                    break;
+                case 'u':
+                    tmp[tmppos++] = 31;
                     break;
                 default:
                     //unknown - just write it