--- freem/src/fmadm.c	2025/03/09 19:14:25	1.7
+++ freem/src/fmadm.c	2025/03/31 16:33:56	1.18
@@ -1,5 +1,5 @@
 /*
- *   $Id: fmadm.c,v 1.7 2025/03/09 19:14:25 snw Exp $
+ *   $Id: fmadm.c,v 1.18 2025/03/31 16:33:56 snw Exp $
  *    FreeM Administration Tool
  *
  *  
@@ -24,6 +24,39 @@
  *   along with FreeM.  If not, see .
  *
  *   $Log: fmadm.c,v $
+ *   Revision 1.18  2025/03/31 16:33:56  snw
+ *   Work on fmadm edit global
+ *
+ *   Revision 1.17  2025/03/30 01:36:58  snw
+ *   Make it easier to bring back fma_gedit, fix double-free in global handler, limit $CHAR to 7-bit ASCII
+ *
+ *   Revision 1.16  2025/03/24 20:59:58  snw
+ *   Try using DosCopy API instead of built-in cp function on OS/2
+ *
+ *   Revision 1.15  2025/03/24 20:58:05  snw
+ *   Try using DosCopy API instead of built-in cp function on OS/2
+ *
+ *   Revision 1.14  2025/03/24 20:57:06  snw
+ *   Try using DosCopy API instead of built-in cp function on OS/2
+ *
+ *   Revision 1.13  2025/03/24 20:15:09  snw
+ *   Set file permissions on freemd.exe on OS/2 in fmadm configure
+ *
+ *   Revision 1.12  2025/03/24 20:13:34  snw
+ *   Set file permissions on freemd.exe on OS/2 in fmadm configure
+ *
+ *   Revision 1.11  2025/03/24 19:25:48  snw
+ *   Make fmadm configure copy freem.exe to freemd.exe for daemon operation on OS/2 systems
+ *
+ *   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
  *
@@ -47,6 +80,10 @@
 #include "namespace.h"
 #include "fs.h"
 
+#if defined(__OS2__)
+# include 
+#endif
+
 #ifdef HAVE_LIBREADLINE
 #  if defined(HAVE_READLINE_READLINE_H)
 #    include 
@@ -86,13 +123,13 @@ extern int read_history ();
 /* namespace configuration */
 char fma_environment[STRLEN];
 char fma_namespace[STRLEN];
-char fma_routine_path[STRLEN];
-char fma_global_path[STRLEN];
-char fma_journal_path[STRLEN];
-char fma_pct_global_path[STRLEN];
-char fma_pct_routine_path[STRLEN];
+char fma_routine_path[PATHLEN];
+char fma_global_path[PATHLEN];
+char fma_journal_path[PATHLEN];
+char fma_pct_global_path[PATHLEN];
+char fma_pct_routine_path[PATHLEN];
 char fma_journal_cut_threshold[STRLEN];
-char fma_locktab[STRLEN];
+char fma_locktab[PATHLEN];
 short fma_base_opt = 1;
 short fma_min_args = 2;
 short fma_explicit_namespace = FALSE;
@@ -1021,11 +1058,9 @@ int fm_edit (short object, int optc, cha
         case OBJ_ROUTINE:
             return fma_routines_edit (optc, options);
 
-        /*
         case OBJ_GLOBAL:
             return fma_globals_edit (optc, options);
-        */
-            
+                        
         default:
             fprintf (stderr, "fmadm:  'edit' is an invalid action for '%s'\n", obj_str);
             return 1;
@@ -1060,7 +1095,7 @@ void fm_reconfigure(void)
     retval = rename (config_file, config_backup);
 
     if (retval == 0) {
-	fprintf (stderr, "[OK]\n\n");
+	fprintf (stderr, "[OK]\n");
 	
 	fm_configure ();
 
@@ -1119,9 +1154,9 @@ void fm_configure (void)
     }
     
     if (file_exists (config_file)) {
-        fprintf (stderr, "fmadm:  '%s' already exists.\n\n", config_file);
-        fprintf (stderr, "'fmadm configure' may only be used on a fresh installation of FreeM.\n");
-        exit (1);
+        fprintf (stderr, "fmadm:  '%s' already exists; running fmadm reconfigure instead\n", config_file);
+        fm_reconfigure ();
+        return;
     }
 
 
@@ -1134,12 +1169,34 @@ void fm_configure (void)
     snprintf (envbase, 4095, "%s/freem/%s", SYSCONFDIR, 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);
+
+        unlink (dstfile);
+        
+        fprintf (stderr, "fmadm:  running on OS/2; will copy %s to %s\n", srcfile, dstfile);
+        
+        if (DosCopy (srcfile, dstfile, 1) != 0) {
+            fprintf (stderr, "fmadm:  fatal error copying %s to %s\n", srcfile, dstfile);
+            exit (1);
+        }
+
+        chmod (dstfile, 0755);
+    }
+#else
+    fprintf (stderr, "fmadm:  not running on OS/2\n");
+#endif
+    
     printf ("\nFreeM Initial Configuration\n");
     printf ("---------------------------\n\n");
 
     printf ("This utility will create the initial configuration file for ");
     printf ("FreeM environment '%s' in %s.\n\n", fma_environment, config_file);    
-
     
     /* check for existence of needed directories */
     if (stat (SYSCONFDIR, &etcstat) == -1) {