diff --git a/source/server/main.c b/source/server/main.c new file mode 100644 index 0000000..123c50d --- /dev/null +++ b/source/server/main.c @@ -0,0 +1,43 @@ +// ========================================= +// | SilverMUD Server - main.c | +// | Copyright (C) 2023, Barra Ó Catháin | +// | See end of file for copyright notice. | +// ========================================= +#include +#include + +#include "scheme-integration.h" + +int main (int argc, char ** argv) +{ + // Print a welcome message: + printf("SilverMUD Server - Starting Now.\n" + "================================\n"); + + // Create the Scheme thread: + pthread_t schemeThread; + pthread_create(&schemeThread, NULL, schemeThreadHandler, NULL); + + // Wait for all other threads to terminate: + pthread_join(schemeThread, NULL); + + // Return a successful status code to the operating system: + return 0; +} + +// ============================================ +// | End of main.c, copyright notice follows. | +// ============================================ + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . diff --git a/source/server/scheme-integration.c b/source/server/scheme-integration.c new file mode 100644 index 0000000..2da7cb0 --- /dev/null +++ b/source/server/scheme-integration.c @@ -0,0 +1,49 @@ +// =========================================== +// | SilverMUD Server - scheme-integration.c | +// | Copyright (C) 2023, Barra Ó Catháin | +// | See end of file for copyright notice. | +// =========================================== +#include + +#include "scheme-integration.h" + +// The function ran by the Scheme thread which initializes the REPL: +void * schemeThreadHandler (void * threadParameters) +{ + // Unpack the parameters given to the thread: + struct SchemeThreadArguments * arguments = threadParameters; + + // Initialize GNU Guile: + scm_init_guile(); + + // Enable Readline support: + scm_c_eval_string("(begin (use-modules (ice-9 readline)) (activate-readline))"); + + // Start the REPL server on a UNIX socket: + scm_c_eval_string("(begin (use-modules (system repl server))" + "(if (file-exists? \"silvermud-repl\") (delete-file \"silvermud-repl\"))" + "(spawn-server (make-unix-domain-server-socket #:path \"silvermud-repl\")))"); + + // Start a Scheme REPL: + scm_shell(0, NULL); + + // Return NULL to the calling thread: + return NULL; +} + +// ========================================================== +// | End of scheme-integration.c, copyright notice follows. | +// ========================================================== + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . diff --git a/source/server/scheme-integration.h b/source/server/scheme-integration.h new file mode 100644 index 0000000..135a650 --- /dev/null +++ b/source/server/scheme-integration.h @@ -0,0 +1,33 @@ +// =========================================== +// | SilverMUD Server - scheme-integration.h | +// | Copyright (C) 2023, Barra Ó Catháin | +// | See end of file for copyright notice. | +// =========================================== +#ifndef SCHEME_INTEGRATION_H +#define SCHEME_INTEGRATION_H + +struct SchemeThreadArguments +{ + +}; + +// The function ran by the Scheme thread which initializes the REPL: +void * schemeThreadHandler (void * threadParameters); + +#endif +// ========================================================== +// | End of scheme-integration.h, copyright notice follows. | +// ========================================================== + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see .