Diff for /freem/src/cmd_zedit.c between versions 1.1 and 1.6

version 1.1, 2025/05/19 01:08:12 version 1.6, 2025/05/20 16:20:42
Line 1 Line 1
   
 /*  /*
  *  
  *   $Id$   *   $Id$
  *    Implementation of the ZEDIT command   *    Implementation of the ZEDIT command
  *   *
Line 26 Line 24
  *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.   *   along with FreeM.  If not, see <https://www.gnu.org/licenses/>.
  *   *
  *   $Log$   *   $Log$
    *   Revision 1.6  2025/05/20 16:20:42  snw
    *   Update ROUTINE SSVN after ZEDIT and ZSAVE
    *
    *   Revision 1.5  2025/05/20 14:36:06  snw
    *   Documentation updates; raise ZCMMND instead of NOSTAND for restricted_mode restrictions
    *
    *   Revision 1.4  2025/05/19 21:29:29  snw
    *   Add basic tab completion to direct mode
    *
    *   Revision 1.3  2025/05/19 17:57:20  snw
    *   Extend ZEDIT to create the specified routine if it does not yet exist
    *
    *   Revision 1.2  2025/05/19 02:03:31  snw
    *   Reverse-engineer and document argumented ZPRINT (thanks to D. Wicksell)
    *
  *   Revision 1.1  2025/05/19 01:08:12  snw   *   Revision 1.1  2025/05/19 01:08:12  snw
  *   Add ZEDIT command (properly this time)   *   Add ZEDIT command (properly this time)
  *   *
Line 35 Line 48
  **/   **/
   
 #include <string.h>  #include <string.h>
   #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <ctype.h>  #include <ctype.h>
 #include "mpsdef.h"  #include "mpsdef.h"
Line 48  MRESULT cmd_zedit(MACTION *ra) Line 62  MRESULT cmd_zedit(MACTION *ra)
     char editor_command[PATHLEN];      char editor_command[PATHLEN];
     char *tgt_editor;      char *tgt_editor;
     short free_editor = FALSE;      short free_editor = FALSE;
       FILE *fp;
       
     if (restricted_mode) {      if (restricted_mode) {
         retval = NOSTAND;          /* we never shell out in restricted mode */
           retval = CMMND;
         goto done;          goto done;
     }      }
   
     if (rou_name[0] == EOL) {      if (rou_name[0] == EOL) {
           /* there was no current routine */
         retval = NOPGM;          retval = NOPGM;
         goto done;          goto done;
     }              }        
Line 64  MRESULT cmd_zedit(MACTION *ra) Line 81  MRESULT cmd_zedit(MACTION *ra)
         NULLPTRCHK(tgt_editor,"cmd_zedit");          NULLPTRCHK(tgt_editor,"cmd_zedit");
                   
         snprintf (tgt_editor, STRLEN - 1, "/usr/bin/vi");          snprintf (tgt_editor, STRLEN - 1, "/usr/bin/vi");
   
           /* had to allocate the editor path on the heap,
              so we need to free it later */         
         free_editor = TRUE;          free_editor = TRUE;
     }      }
           
     if (*codptr == SP || *codptr == EOL) {      if (*codptr == SP || *codptr == EOL) {
           /* argumentless ZEDIT edits the current routine */
         stcpy (tgt_routine, rou_name);          stcpy (tgt_routine, rou_name);
     }      }
     else {      else {
           /* argumented ZEDIT edits a specified routine */
         expr (NAME);          expr (NAME);
                   
         if (varnam[0] == '^') {          if (varnam[0] == '^') {
Line 94  MRESULT cmd_zedit(MACTION *ra) Line 116  MRESULT cmd_zedit(MACTION *ra)
     stcnv_m2c (tgt_routine);      stcnv_m2c (tgt_routine);
           
     if ((rtn_get_path (tgt_routine, pth)) == FALSE) {      if ((rtn_get_path (tgt_routine, pth)) == FALSE) {
         retval = NOPGM;          /* the routine could not be found */
         goto done;          if ((fp = fopen (pth, "w")) == NULL) {
               retval = PROTECT;
               goto done;
           }
   
           fprintf (fp, "%s ; Created by FreeM Administrator\n    QUIT\n", tgt_routine);
           fclose (fp);
     }      }
           
     snprintf (editor_command, sizeof (editor_command) - 1, "%s %s", tgt_editor, pth);      snprintf (editor_command, sizeof (editor_command) - 1, "%s %s", tgt_editor, pth);
       
       /* make the environment friendly to running external programs */
     sig_attach (SIGUSR1, SIG_IGN);      sig_attach (SIGUSR1, SIG_IGN);
     set_io (UNIX);      set_io (UNIX);
   
     system (editor_command);      system (editor_command);
   
       ssvn_routine_update ();
       
       /* back into mumps */
     set_io (MUMPS);      set_io (MUMPS);
     sig_attach (SIGUSR1, &oncld);      sig_attach (SIGUSR1, &oncld);
   
     retval = OK;      retval = OK;
       codptr++;
           
 done:  done:
     if (free_editor) free (tgt_editor);      if (free_editor) free (tgt_editor);

Removed from v.1.1  
changed lines
  Added in v.1.6


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>