X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=src%2Fserver%2Finit.c;h=43a4d685a5477a2a375f9e7c2fc4c08b6f4c5a86;hb=ac7521c1d40b86cd7d33cef590353692542fa0a4;hp=16ab4dfb42ffe2728803a40a8750233c5e2f4b15;hpb=891ba8fbca53d920f6b3704827fa6b8aee737de4;p=plomrogue diff --git a/src/server/init.c b/src/server/init.c index 16ab4df..43a4d68 100644 --- a/src/server/init.c +++ b/src/server/init.c @@ -1,4 +1,9 @@ -/* src/server/init.c */ +/* src/server/init.c + * + * This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3 + * or any later version. For details on its copyright, license, and warranties, + * see the file NOTICE in the root directory of the PlomRogue source package. + */ #define _POSIX_C_SOURCE 2 /* getopt(), optarg */ #include "init.h" @@ -20,13 +25,13 @@ #include "../common/rexit.h" /* exit_err(), exit_trouble() */ #include "../common/try_malloc.h" /* try_malloc() */ #include "cleanup.h" /* set_cleanup_flag() */ -#include "field_of_view.h" /* build_fov_map() */ +#include "field_of_view.h" /* update_map_memory() */ #include "hardcoded_strings.h" /* s */ #include "map.h" /* remake_map() */ #include "things.h" /* Thing, ThingType, free_things(), add_things(), - * get_thing_id_action_id_by_name() + * get_thing_id_action_id_by_name(), get_player() */ -#include "run.h" /* obey_msg(), io_loop() */ +#include "run.h" /* obey_msg(), io_loop(), record(), send_to_outfile() */ #include "world.h" /* global world */ @@ -52,11 +57,10 @@ static uint8_t world_cannot_be_made(); static void obey_lines_from_file(char * path, uint8_t record) { - char * f_name = "obey_lines_from_file()"; - FILE * file = try_fopen(path, "r", f_name); + FILE * file = try_fopen(path, "r", __func__); uint32_t linemax = textfile_width(file); - char * line = try_malloc(linemax + 1, f_name); - while (NULL != try_fgets(line, linemax + 1, file, f_name)) + char * line = try_malloc(linemax + 1, __func__); + while (try_fgets(line, linemax + 1, file, __func__)) { if (strlen(line)) { @@ -67,45 +71,44 @@ static void obey_lines_from_file(char * path, uint8_t record) { *nl = '\0'; } - obey_msg(line, record, 1); + obey_msg(line, record); } err_line_inc(); } } free(line); - try_fclose(file, f_name); + try_fclose(file, __func__); } static void replay_game() { - char * f_name = "replay_game()"; exit_err(access(s[S_PATH_RECORD], F_OK), "No record found to replay."); - FILE * file = try_fopen(s[S_PATH_RECORD], "r", f_name); + FILE * file = try_fopen(s[S_PATH_RECORD], "r", __func__); uint32_t linemax = textfile_width(file); - char * line = try_malloc(linemax + 1, f_name); + char * line = try_malloc(linemax + 1, __func__); while ( world.turn < world.replay - && NULL != try_fgets(line, linemax + 1, file, f_name)) + && try_fgets(line, linemax + 1, file, __func__)) { - obey_msg(line, 0, 1); + obey_msg(line, 0); err_line_inc(); } uint8_t end = 0; - while (!io_loop()) + while (3 == io_loop(2)) { if (!end) { - end = (NULL == try_fgets(line, linemax + 1, file, f_name)); + end = (NULL == try_fgets(line, linemax + 1, file, __func__)); if (!end) { - obey_msg(line, 0, 1); + obey_msg(line, 0); err_line_inc(); } } } free(line); - try_fclose(file, f_name); + try_fclose(file, __func__); } @@ -114,7 +117,7 @@ static uint8_t world_cannot_be_made() { uint8_t player_will_be_generated = 0; struct ThingType * tt; - for (tt = world.thing_types; NULL != tt; tt = tt->next) + for (tt = world.thing_types; tt; tt = tt->next) { if (world.player_type == tt->id) { @@ -163,15 +166,14 @@ extern void obey_argv(int argc, char * argv[]) extern void setup_server_io() { - char * f_name = "setup_server_io()"; int test = mkdir("server", 0700); - exit_trouble(test && EEXIST != errno, f_name, "mkdir()"); - world.file_out = try_fopen(s[S_PATH_OUT], "w", f_name); - world.server_test = try_malloc(10 + 1 + 10 + 1 + 1, f_name); + exit_trouble(test && EEXIST != errno, __func__, "mkdir"); + world.file_out = try_fopen(s[S_PATH_OUT], "w", __func__); + world.server_test = try_malloc(10 + 1 + 10 + 1 + 1, __func__); test = sprintf(world.server_test, "%d %d\n", getpid(), (int) time(0)); - exit_trouble(test < 0, f_name, s[S_FCN_SPRINTF]); + exit_trouble(test < 0, __func__, s[S_FCN_SPRINTF]); try_fwrite(world.server_test, strlen(world.server_test), 1, - world.file_out, f_name); + world.file_out, __func__); fflush(world.file_out); set_cleanup_flag(CLEANUP_OUT); char * path_in = s[S_PATH_IN]; @@ -179,9 +181,9 @@ extern void setup_server_io() { /* file streams of clients */ unlink(path_in) ; /* communicating with server processes */ } /* superseded by this current one. */ - world.file_in = try_fopen(path_in, "w", f_name); - try_fclose(world.file_in, f_name); - world.file_in = try_fopen(path_in, "r", f_name); + world.file_in = try_fopen(path_in, "w", __func__); + try_fclose(world.file_in, __func__); + world.file_in = try_fopen(path_in, "r", __func__); set_cleanup_flag(CLEANUP_IN); } @@ -194,13 +196,12 @@ extern uint8_t remake_world() { return test; } - free(world.log); - world.log = NULL; /* thing_actions.c's update_log() checks for this. */ world.seed_map = world.seed; free_things(world.things); remake_map(); + world.exists = 1; struct ThingType * tt; - for (tt = world.thing_types; NULL != tt; tt = tt->next) + for (tt = world.thing_types; tt; tt = tt->next) { if (world.player_type == tt->id) { @@ -208,21 +209,16 @@ extern uint8_t remake_world() break; } } - for (tt = world.thing_types; NULL != tt; tt = tt->next) + update_map_memory(get_player()); + for (tt = world.thing_types; tt; tt = tt->next) { if (world.player_type != tt->id) { add_things(tt->id, tt->start_n); } } - struct Thing * t; - for (t = world.things; NULL != t; t = t->next) - { - t->fov_map = t->lifepoints ? build_fov_map(t) : NULL; - } world.turn = 1; - world.do_update = 1; - world.exists = 1; + send_to_outfile("NEW_WORLD\n", 1); return 0; } @@ -230,7 +226,6 @@ extern uint8_t remake_world() extern void run_game() { - char * f_name = "run_game()"; detect_atomic_leftover(s[S_PATH_SAVE]); detect_atomic_leftover(s[S_PATH_RECORD]); err_line_zero(); @@ -250,12 +245,13 @@ extern void run_game() obey_lines_from_file(s[S_PATH_CONFIG], 1); err_line_zero(); char * command = s[S_CMD_MAKE_WORLD]; - char * msg = try_malloc(strlen(command) + 1 + 11 + 1, f_name); + char * msg = try_malloc(strlen(command) + 1 + 11 + 1, __func__); int test = sprintf(msg, "%s %d", command, (int) time(NULL)); - exit_trouble(test < 0, f_name, s[S_FCN_SPRINTF]); - obey_msg(msg, 1, 1); + exit_trouble(test < 0, __func__, s[S_FCN_SPRINTF]); + obey_msg(msg, 1); free(msg); } err_line_zero(); - io_loop(); + io_loop(1); + record(NULL, 1); }