| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2016-06-08 17:58:56 +0200 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2016-06-08 17:58:56 +0200 | 
| commit | 16265ec44520c3926c11127d0a6a6bac82a53275 (patch) | |
| tree | e54aeed621509655e0e5a5c8a0d1ef3bc50be7f9 /src | |
| parent | d29327bdc629dfa37360465b03ef45d205e7a225 (diff) | |
ZoO now appends anything it learns to a file.
Also, removes the "pointing to [...]" message, which was used for debug
purposes.
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/create_sentences.c | 6 | ||||
| -rw-r--r-- | src/core/main.c | 109 | ||||
| -rw-r--r-- | src/io/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/io/network.c | 15 | ||||
| -rw-r--r-- | src/io/parameters.c | 33 | ||||
| -rw-r--r-- | src/io/parameters_types.h | 1 | 
6 files changed, 144 insertions, 21 deletions
| diff --git a/src/core/create_sentences.c b/src/core/create_sentences.c index e999199..6b69111 100644 --- a/src/core/create_sentences.c +++ b/src/core/create_sentences.c @@ -307,12 +307,6 @@ static unsigned char * extend_right        switch (w->special)        {           case ZoO_WORD_REMOVES_LEFT_SPACE: -            printf -            ( -               "current sentence:'%s', pointing at '%c'.\n", -               current_sentence, -               current_sentence[*sentence_size - addition_size - 2] -            );              current_sentence[*sentence_size - addition_size - 2] = '\0';           case ZoO_WORD_HAS_NO_EFFECT: diff --git a/src/core/main.c b/src/core/main.c index 1a8a40f..15df961 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -9,9 +9,9 @@  #include "../io/error.h"  #include "../io/parameters.h"  #include "../io/data_input.h" +#include "../io/data_output.h"  #include "../io/network.h" -  #include "knowledge.h"  #include "state_types.h" @@ -152,15 +152,52 @@ static int should_reply  static void handle_user_join  ( -   struct ZoO_state s [const static 1] +   struct ZoO_state s [const static 1], +   struct ZoO_strings string [const restrict static 1], +   ssize_t const msg_offset, +   ssize_t const msg_size  )  {     ZoO_char * line; +   ZoO_index loc; + +   if (s->param.reply_rate < (rand() % 100)) +   { +      return; +   }     if     ( -      (s->param.reply_rate >= (rand() % 100)) -      && +      ZoO_strings_parse +      ( +         string, +         (size_t) msg_size, +         (s->network.in + msg_offset), +         ZoO_knowledge_punctuation_chars_count, +         ZoO_knowledge_punctuation_chars +      ) < 0 +   ) +   { +      ZoO_S_DEBUG(ZoO_DEBUG_PROGRAM_FLOW, "Could not dissect join username."); + +      return; +   } + +   if +   ( +      ( +      ZoO_knowledge_find +         ( +            &(s->knowledge), +            string->words[0], +            &loc +         ) < 0 +      ) +      || (s->knowledge.words[loc].backward_links_count <= 3) +      || (s->knowledge.words[loc].forward_links_count <= 3) +   ) +   { +      if        (           ZoO_knowledge_extend           ( @@ -170,20 +207,47 @@ static void handle_user_join              &line           ) == 0        ) -   ) -   { -      if (line[0] == ' ')        { -         strcpy((s->network.out), (line + 1)); +         if (line[0] == ' ') +         { +            strcpy((s->network.out), (line + 1)); +         } +         else +         { +            strcpy((s->network.out), line); +         } + +         free((void *) line); + +         ZoO_network_send(&(s->network));        } -      else +   } +   else +   { +      if +      ( +         ZoO_knowledge_extend +         ( +            &(s->knowledge), +            string, +            0, +            &line +         ) == 0 +      )        { -         strcpy((s->network.out), line); -      } +         if (line[0] == ' ') +         { +            strcpy((s->network.out), (line + 1)); +         } +         else +         { +            strcpy((s->network.out), line); +         } -      free((void *) line); +         free((void *) line); -      ZoO_network_send(&(s->network)); +         ZoO_network_send(&(s->network)); +      }     }  } @@ -192,6 +256,9 @@ static void handle_message     struct ZoO_state s [const static 1],     struct ZoO_strings string [const restrict static 1],     ssize_t const msg_offset, +   /* FIXME: somehow we end up using (msg_size + 1), meaning there's a mixup +    *        between size and length. +    */     ssize_t const msg_size  )  { @@ -222,6 +289,20 @@ static void handle_message     reply = should_reply(&(s->param), string, &learn); +   if (learn) +   { +      /* +       * It would be best to do that after replying, but by then we no longer +       * have the string in 's->network.in'. +       */ +      (void) ZoO_data_output_write_line +      ( +         s->param.new_data_filename, +         (s->network.in + msg_offset), +         (size_t) (msg_size + 1) +      ); +   } +     if     (        reply @@ -290,7 +371,7 @@ static int main_loop (struct ZoO_state s [const static 1])           switch (msg_type)           {              case ZoO_JOIN: -               handle_user_join(s); +               handle_user_join(s, &string, msg_offset, msg_size);                 break;              case ZoO_PRIVMSG: diff --git a/src/io/CMakeLists.txt b/src/io/CMakeLists.txt index a13154b..c36413a 100644 --- a/src/io/CMakeLists.txt +++ b/src/io/CMakeLists.txt @@ -3,6 +3,7 @@ set(     ${CMAKE_CURRENT_SOURCE_DIR}/parameters.c     ${CMAKE_CURRENT_SOURCE_DIR}/network.c     ${CMAKE_CURRENT_SOURCE_DIR}/data_input.c +   ${CMAKE_CURRENT_SOURCE_DIR}/data_output.c  )  set(SRC_FILES ${SRC_FILES} PARENT_SCOPE) diff --git a/src/io/network.c b/src/io/network.c index 45be5fb..0c9cf33 100644 --- a/src/io/network.c +++ b/src/io/network.c @@ -436,6 +436,21 @@ READ_NEW_MSG:        if (ZoO_IS_PREFIX("JOIN", (net->in + cmd)))        { +         for (i = 1; (i < 512) && (net->in[i] != '!'); ++i) +         { +         } + +         if ((i == 512) || (i == 1)) +         { +            ZoO_ERROR("Could not find JOIN username: %s", net->in); + +            goto READ_NEW_MSG; +         } + +         *msg_offset = 1; +         *msg_size = (i - 1); +         net->in[i] = '\0'; +           *type = ZoO_JOIN;           return 0; diff --git a/src/io/parameters.c b/src/io/parameters.c index 0f7d05c..77c33aa 100644 --- a/src/io/parameters.c +++ b/src/io/parameters.c @@ -14,7 +14,8 @@ static void load_default_parameters     struct ZoO_parameters param [const restrict static 1]  )  { -   param->data_filename       = ZoO_DEFAULT_DATA_FILENAME; +   param->data_filename        = ZoO_DEFAULT_DATA_FILENAME; +   param->new_data_filename    = (char *) NULL;     param->irc_server_addr     = ZoO_DEFAULT_IRC_SERVER_ADDR;     param->irc_server_port     = ZoO_DEFAULT_IRC_SERVER_PORT; @@ -39,6 +40,9 @@ static void print_help (const char exec [const restrict static 1])        "   [--data-filename | -df] FILENAME\n"        "      Learn content from FILENAME before connecting.\n"        "      Default: %s.\n" +      "   [--new-data-filename | -ndf] FILENAME\n" +      "      Store new data learned in FILENAME.\n" +      "      Default: value of the --data-filename param.\n"        "   [--irc-server-addr | -isa] IRC_SERVER_ADDR\n"        "      Connect to this server address.\n"        "      Default: %s.\n" @@ -190,6 +194,28 @@ int ZoO_parameters_initialize        }        else if        ( +         (strcmp(argv[i], "--new-data-filename") == 0) +         || (strcmp(argv[i], "-ndf") == 0) +      ) +      { +         i += 1; + +         if +         ( +            parse_string_arg +            ( +               &(param->new_data_filename), +               i, +               argv, +               argc +            ) < 0 +         ) +         { +            return -1; +         } +      } +      else if +      (           (strcmp(argv[i], "--irc-server-addr") == 0)           || (strcmp(argv[i], "-isa") == 0)        ) @@ -350,5 +376,10 @@ int ZoO_parameters_initialize     param->aliases_count = (argc - i);     param->aliases = (argv + i); +   if (param->new_data_filename == (char *) NULL) +   { +      param->new_data_filename = param->data_filename; +   } +     return 1;  } diff --git a/src/io/parameters_types.h b/src/io/parameters_types.h index 6d511d8..92a9e30 100644 --- a/src/io/parameters_types.h +++ b/src/io/parameters_types.h @@ -4,6 +4,7 @@  struct ZoO_parameters  {     const char * restrict data_filename; +   const char * restrict new_data_filename;     const char * restrict irc_server_addr;     const char * restrict irc_server_port; | 


