RIP dataflow

+-----------------------------+     +----------------------------+     +------------------------+    +----------------+    +-----------------------+
| attributes                  |     | objects                    |     | socket                 |    | bitmask        |    | errors                |
+-----------------------------+     +----------------------------+     +------------------------+    +----------------+    +-----------------------+
! Attributes                  !     ! Objects                    !     !........................!    !................!    ! er_level_a            !
| Attributes_details          |     !............................!     | SK_atoport()           |    | MA_new()       |    ! ER_mod_err            !
! Sources                     !     | OB_init()                  |     | SK_close()             |    | MA_free()      |    ! IP_mod_er             !
!.............................!     | OB_get_inv_attr_mask()     |     | SK_getsock()           |    | MA_set()       |    ! RX_mod_err            !
| AT_get_sources()            |     | OB_get_object_mask()       |     | SK_accept_connection() |    | MA_isset()     |    ! UT_mod_err            !
| AT_get_source()             |     | OB_object_to_string1()     |     | SK_gets()              |    | MA_clear()     |    ! er_main_err           !
| AT_sources_to_string()      |     | OB_object_to_string2()     |     | SK_puts()              |    | MA_prt()       |    ! er_progname           !
| AT_sources_list_to_string() |     | OB_object_i_to_string()    |     +----------------------+-+    | MA_and()       |    ! er_pid                !
| AT_get_attributes()         |     | OB_attribute_i_to_string() |                   A        |      | MA_xor()       |    ! er_provisional_struct !
| AT_get_attribute()          |     | OB_objects_to_string()     |                   |        |      | MA_or()        |    !.......................!
| AT_get_attribute_desc()     |     +--------+---------+---------+                   |        |      | MA_bitcount()  |    | ER_init()             |
| AT_get_attribute_frmt()     |              |    A    |                             |        V      | MA_to_string() |    | ER_perror()           |
| AT_attributes_to_string()   |              V    |    |                             |        |      +----------------+    | ER_dbg_va()           |
+-----------------------------+              |    |    |                             |        |              |             | ER_anybody_wants()    |
                A                            |    |    |                             |        |              |             | ER_setpath()          |
                +----------------------------+------------------------------------------------------+        A             | ER_is_traced()        |
                                                  |    |                             |        |     |        |             +-----------------------+
                                                  |    V                             |        |     |        |                        A
                                                  |    |                             |        |     |        |                        |
                                                  |    +-----------------------------------------------------+-----+----------------------+
                                                  |                                  |        |     |              |                  |   |
                                                  |                                  |        |     |              |                  |   |
                                                  |                                  |        |     |              |                  |   |
                           +----------------------+--------------------------+---------------------------+         |                  |   |
                           |                                                 |       |        |     |    |         |                  |   |
                           |                                                 |       |        |     |    |         |                  |   |
                           |                                                 |       |        |     |    |         |                  |   |
                           |                             +-----------------------+---+------------------------+    |                  |   |
                           |                             |                   |   |   |        |     |    |    |    |                  |   |
                           |                             |                   |   |   |        |     |    |    |    |                  |   |
 +-------------+           |                             |                   |   |   |        |     |    |    |    |                  |   |
 |+-----------+|    +------+-----+     +-----------------+--------+    +-----+---+------+     |  +--+----+----+----+------------+    +----+-----------------+
 || whois_rip ||    | server     |     | thread                   |    | protocol_whois |     |  | query_command                |    | which_keytype        |
 |+-----------+|    +------------+     +--------------------------+    +----------------+     |  +------------------------------+    +----------------------+
 |!...........!|    !............!     ! Whois_thread_count_lock  |    !................!     |  !..............................!    !......................!
 || main()    |+---}| SV_start() +----}| Config_thread_count_lock +-+-}| PW_interact()  +---+---}| QC_new()                     +---}| WK_new()             |
 |+-----------+|    +-----+------+     | Mirror_thread_count_lock | |  +------+---------+   | |  | QC_free()                    |    +----------------------+
 +----+---+----+          |            | Whois_thread_count       | |         |      |      | |  | QC_environ_update()          |     |
      |   |               |            | Config_thread_count      | |         |      |      | |  | QC_bitmap_to_string()        |     |
      |   |               |            | Mirror_thread_count      | |  +-------------+---+  | |  | QC_query_command_to_string() |     |
      |   |               |            !..........................! |  | protocol_config |  | |  +------------------------------+     |
      |   |               |            | TH_do_whois()            | |  +-----------------+  | |                                       |
      |   |               |            | TH_do_config()           | |  !.................!  | |  +--------------------+               |
      |   |               |            | TH_get_id()              | +-}| PC_interact()   |  | |  | query_instructions |               |
      |   |               |            | TH_run()                 |    +--+-------+---+--+  | |  +--------------------+               |
      |   |               |            | TH_to_string()           |       |   |   |   |     | |  !....................!               |
      |   |               |            +---------+----------------+       |   |   |   |     +---}| QI_new()           |               |
      |   |               |                      |                        |   |   |   |       |  | QI_free()          |               |
      |   |               |                      |                        |   |   |   |       |  | QI_execute()       |               |
      +-------------------------------------------------------------------+   |   |   |       |  +-------+------------+               |
      |   |               |                      |                            |   |   |       |          |  |                         |
      |   |               |                      |                            |   |   |       |          |  |                         |
      |   |               |                      |                            |   |   |       |          |  |                         |
      |   |               +--------------------------------------------+--------------+---------------------+                         |
      |   |                                      |                     |      |   |           |          |                            |
      |   |                                      |                     |      |   |           |          |                            |
      |   |                                      |                     |      |   |           |          |                            |
      |   +----------------------------+---------+-------------+--------------+---+-----------+          V                            |
      |                                |                       |       |                                 |                            |
      |                                |                       A       |                           +----------------------------------+-------------
      V                                V                       |       V                           |     |
+-------------------+     +--------------------------+   +-----+----------------------+   +--------+----------+   +-------------------+   +-------------------+
| properties        |     | constants                |   | mysql_driver               |   | radix             |   | ip                |   | ut                |
+-------------------+     +--------------------------+   +----------------------------+   +-------------------+   +-------------------+   +-------------------+
| Propertes         |     | Constants                |   !............................!   !...................!   !...................!   !...................!
| Prop_file_name    |     !..........................!   | SQ_get_connection()        |   | RX_bin_node()     !   | IP_addr_t2b()     !   |                   !
| Prop_count        |     | CO_set()                 |   | SQ_execute_query()         |   | RX_asc_node()     |   | IP_pref_t2b()     |   |                   |
!...................!     | CO_set_const()           |   | SQ_get_column_count()      |   | RX_get_tree()     +--}| IP_rang_t2b()     |   |                   |
| PR_load()         |     | CO_const_to_string()     |   | SQ_get_column_label()      |   | RX_inum_node()    |   | IP_addr_b2a()     |   |                   |
| PR_set()          |     | CO_get_max_threads()     |   | SQ_get_column_max_length() |   | RX_asc_search()   |   | IP_pref_b2a()     |   |                   |
| PR_get_property() |{----+ CO_get_whois_port()      |   | SQ_row_next()              |   | RX_space_cre()    |   | IP_rang_b2a()     |   |                   |
| PR_to_string()    |     | CO_get_config_port()     |   | SQ_get_column_string()     |   +-------------------+   | IP_addr_bit_get() |   |                   |
+-------------------+     | CO_get_mirror_port()     |   | SQ_get_column_strings()    |                           | IP_addr_bit_set() |   |                   |
                          | CO_get_host()            |   | SQ_get_column_int()        |                           | IP_addr_cmp()     |   |                   |
                          | CO_get_user()            |   | SQ_result_to_string()      |                           | IP_sizebits()     |   |                   |
                          | CO_get_password()        |   | SQ_free_result()           |                           | IP_pref_bit_fix() |   |                   |
                          | CO_get_database_port()   |   | SQ_close_connection()      |                           | IP_smart_conv()   |   |                   |
                          | CO_get_database()        |   | SQ_num_rows()              |                           +-------------------+   +-------------------+
                          | CO_get_query()           |   | SQ_info_to_string()        |
                          | CO_get_in_query()        |   | SQ_error()                 |
                          | CO_get_rt_query()        |   | SQ_errno()                 |
                          | CO_get_authenticate()    |   +----------------------------+
                          | CO_get_whois_suspended() |
                          | CO_get_welcome()         |
                          | CO_get_prompt()          |
                          | CO_get_clear_screen()    |
                          | CO_get_sleep_time()      |
                          | CO_get_accounting()      |
                          | CO_get_query_logging()   |
                          | CO_get_query_logfile()   |
                          | CO_get_comnd_logging()   |
                          | CO_get_comnd_logfile()   |
                          | CO_get_instr_logging()   |
                          | CO_get_instr_logfile()   |
                          | CO_get_tests_logging()   |
                          | CO_get_tests_logfile()   |
                          | CO_get_thread_logging()  |
                          | CO_get_thread_logfile()  |
                          | CO_get_socket_logging()  |
                          | CO_get_socket_logfile()  |
                          | CO_get_config_logging()  |
                          | CO_get_config_logfile()  |
                          | CO_to_string()           |
                          +--------------------------+