|
|
| version 1.1, 2025/01/19 02:04:04 | version 1.10, 2025/03/24 19:22:16 |
|---|---|
| Line 1 | Line 1 |
| /* | /* |
| * * | * $Id$ |
| * * * | |
| * * * | |
| * *************** | |
| * * * * * | |
| * * MUMPS * | |
| * * * * * | |
| * *************** | |
| * * * | |
| * * * | |
| * * | |
| * | |
| * fmadm.c | |
| * FreeM Administration Tool | * FreeM Administration Tool |
| * | * |
| * | * |
| * Author: Serena Willis <jpw@coherent-logic.com> | * Author: Serena Willis <snw@coherent-logic.com> |
| * Copyright (C) 1998 MUG Deutschland | * Copyright (C) 1998 MUG Deutschland |
| * Copyright (C) 2020, 2023 Coherent Logic Development LLC | * Copyright (C) 2020, 2023, 2025 Coherent Logic Development LLC |
| * | * |
| * | * |
| * This file is part of FreeM. | * This file is part of FreeM. |
| Line 35 | Line 23 |
| * You should have received a copy of the GNU Affero Public License | * You should have received a copy of the GNU Affero Public License |
| * along with FreeM. If not, see <https://www.gnu.org/licenses/>. | * along with FreeM. If not, see <https://www.gnu.org/licenses/>. |
| * | * |
| * $Log$ | |
| * Revision 1.10 2025/03/24 19:22:16 snw | |
| * Make fmadm configure copy freem.exe to freemd.exe for daemon operation on OS/2 systems | |
| * | |
| * Revision 1.9 2025/03/24 19:19:42 snw | |
| * Make fmadm configure copy freem.exe to freemd.exe for daemon operation on OS/2 systems | |
| * | |
| * Revision 1.8 2025/03/22 18:43:54 snw | |
| * Make STRLEN 255 chars and add BIGSTR macro for larger buffers | |
| * | |
| * Revision 1.7 2025/03/09 19:14:25 snw | |
| * First phase of REUSE compliance and header reformat | |
| * | |
| * | |
| * SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC | |
| * SPDX-License-Identifier: AGPL-3.0-or-later | |
| **/ | **/ |
| #include <sys/types.h> | #include <sys/types.h> |
| Line 46 | Line 50 |
| #include <stdlib.h> | #include <stdlib.h> |
| #include <unistd.h> | #include <unistd.h> |
| #include <errno.h> | #include <errno.h> |
| #include <ctype.h> | |
| #include "config.h" | #include "config.h" |
| #include "transact.h" | #include "transact.h" |
| #include "namespace.h" | #include "namespace.h" |
| Line 90 extern int read_history (); | Line 95 extern int read_history (); |
| /* namespace configuration */ | /* namespace configuration */ |
| char fma_environment[STRLEN]; | char fma_environment[STRLEN]; |
| char fma_namespace[STRLEN]; | char fma_namespace[STRLEN]; |
| char fma_routine_path[STRLEN]; | char fma_routine_path[PATHLEN]; |
| char fma_global_path[STRLEN]; | char fma_global_path[PATHLEN]; |
| char fma_journal_path[STRLEN]; | char fma_journal_path[PATHLEN]; |
| char fma_pct_global_path[STRLEN]; | char fma_pct_global_path[PATHLEN]; |
| char fma_pct_routine_path[STRLEN]; | char fma_pct_routine_path[PATHLEN]; |
| char fma_journal_cut_threshold[STRLEN]; | char fma_journal_cut_threshold[STRLEN]; |
| char fma_locktab[STRLEN]; | char fma_locktab[PATHLEN]; |
| short fma_base_opt = 1; | short fma_base_opt = 1; |
| short fma_min_args = 2; | short fma_min_args = 2; |
| short fma_explicit_namespace = FALSE; | short fma_explicit_namespace = FALSE; |
| Line 554 int fm_shell (void) | Line 559 int fm_shell (void) |
| cmdt = strtok (fmarl_buf, " "); | cmdt = strtok (fmarl_buf, " "); |
| if (cmdt == (char *) NULL) continue; | |
| for (i = 0; i < strlen (cmdt); i++) cmdt[i] = cmdt[i] | 0140; | for (i = 0; i < strlen (cmdt); i++) cmdt[i] = cmdt[i] | 0140; |
| if (strcmp (cmdt, "exit") == 0) cmd = FMAC_EXIT; | if (strcmp (cmdt, "exit") == 0) cmd = FMAC_EXIT; |
| Line 757 int fm_shell (void) | Line 764 int fm_shell (void) |
| printf ("Global Path: %s\n", fma_global_path); | printf ("Global Path: %s\n", fma_global_path); |
| printf ("%%-Global Path: %s\n", fma_pct_global_path); | printf ("%%-Global Path: %s\n", fma_pct_global_path); |
| printf ("Journal File: %s\n", fma_journal_path); | printf ("Journal File: %s\n", fma_journal_path); |
| printf ("Journal Cut Threshold: %ld bytes\n", fma_journal_cut_threshold); | printf ("Journal Cut Threshold: %s bytes\n", fma_journal_cut_threshold); |
| break; | break; |
| case FMAC_EXIT: | case FMAC_EXIT: |
| Line 1023 int fm_edit (short object, int optc, cha | Line 1030 int fm_edit (short object, int optc, cha |
| case OBJ_ROUTINE: | case OBJ_ROUTINE: |
| return fma_routines_edit (optc, options); | return fma_routines_edit (optc, options); |
| /* | |
| case OBJ_GLOBAL: | case OBJ_GLOBAL: |
| return fma_globals_edit (optc, options); | return fma_globals_edit (optc, options); |
| */ | |
| default: | default: |
| fprintf (stderr, "fmadm: 'edit' is an invalid action for '%s'\n", obj_str); | fprintf (stderr, "fmadm: 'edit' is an invalid action for '%s'\n", obj_str); |
| Line 1134 void fm_configure (void) | Line 1143 void fm_configure (void) |
| snprintf (envbase, 4095, "%s/freem/%s", SYSCONFDIR, fma_environment); | snprintf (envbase, 4095, "%s/freem/%s", SYSCONFDIR, fma_environment); |
| snprintf (nsbase, 4095, "%s/freem/%s", LOCALSTATEDIR, fma_environment); | snprintf (nsbase, 4095, "%s/freem/%s", LOCALSTATEDIR, fma_environment); |
| #if defined(__OS2__) | |
| { | |
| char srcfile[PATHLEN]; | |
| char dstfile[PATHLEN]; | |
| snprintf (srcfile, PATHLEN, "%s/bin/freem.exe", PREFIX); | |
| snprintf (dstfile, PATHLEN, "%s/bin/freemd.exe", PREFIX); | |
| fprintf (stderr, "fmadm: running on OS/2; will copy %s to %s\n", srcfile, dstfile); | |
| if (cp (dstfile, srcfile) != 0) { | |
| fprintf (stderr, "fmadm: fatal error copying %s to %s\n", srcfile, dstfile); | |
| exit (1); | |
| } | |
| } | |
| #else | |
| fprintf (stderr, "fmadm: not running on OS/2\n"); | |
| #endif | |
| printf ("\nFreeM Initial Configuration\n"); | printf ("\nFreeM Initial Configuration\n"); |
| printf ("---------------------------\n\n"); | printf ("---------------------------\n\n"); |
| printf ("This utility will create the initial configuration file for "); | printf ("This utility will create the initial configuration file for "); |
| printf ("FreeM environment '%s' in %s.\n\n", fma_environment, config_file); | printf ("FreeM environment '%s' in %s.\n\n", fma_environment, config_file); |
| /* check for existence of needed directories */ | /* check for existence of needed directories */ |
| if (stat (SYSCONFDIR, &etcstat) == -1) { | if (stat (SYSCONFDIR, &etcstat) == -1) { |