Diff for /freem/src/xecline.c between versions 1.23 and 1.30

version 1.23, 2025/05/06 16:10:06 version 1.30, 2025/05/20 16:20:42
Line 24 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.30  2025/05/20 16:20:42  snw
    *   Update ROUTINE SSVN after ZEDIT and ZSAVE
    *
    *   Revision 1.29  2025/05/20 14:56:56  snw
    *   Fix direct-mode interface to online help
    *
    *   Revision 1.28  2025/05/20 14:36:06  snw
    *   Documentation updates; raise ZCMMND instead of NOSTAND for restricted_mode restrictions
    *
    *   Revision 1.27  2025/05/19 21:29:29  snw
    *   Add basic tab completion to direct mode
    *
    *   Revision 1.26  2025/05/19 02:03:31  snw
    *   Reverse-engineer and document argumented ZPRINT (thanks to D. Wicksell)
    *
    *   Revision 1.25  2025/05/18 18:15:38  snw
    *   Add ZEDIT command for editing routines
    *
    *   Revision 1.24  2025/05/14 12:22:04  snw
    *   Further work on shared memory
    *
  *   Revision 1.23  2025/05/06 16:10:06  snw   *   Revision 1.23  2025/05/06 16:10:06  snw
  *   Add extra blank before readline call on NetBSD   *   Add extra blank before readline call on NetBSD
  *   *
Line 174  void rbuf_dump(void); Line 195  void rbuf_dump(void);
 short rbuf_slot_from_name(char *);  short rbuf_slot_from_name(char *);
 short is_standard(void);  short is_standard(void);
   
   #ifdef HAVE_LIBREADLINE
   char *m_commands[] = {
       "?",    
       "@",
       "!<",
       "!>",
       "!!",
       "ablock",
       "astart",
       "astop",
       "aunblock",
       "break",
       "close",
       "do",
       "else",
       "events",
       "for",
       "goto",
       "halt",
       "hang",
       "history",
       "if",
       "job",
       "jobtab",
       "kill",
       "ksubscripts",
       "kvalue",
       "lock",
       "locktab",
       "merge",
       "new",
       "open",
       "quit",
       "rbuf",
       "rcl",
       "read",
       "set",
       "shmpages",
       "shmstat",
       "tcommit",
       "then",
       "trantab",
       "trollback",
       "tstart",
       "use",
       "view",
       "wh",
       "write",
       "xecute",
       "zassert",
       "zbreak",
       "zconst",
       "zedit",
       "zgoto",
       "zhalt",
       "zinsert",
       "zjob",
       "zload",
       "zmap",
       "znew",
       "zprint",
       "zquit",
       "zremove",
       "zsave",
       "zthrow",
       "ztrap",
       "zunmap",
       "zwatch",
       "zwith",
       "zwrite",
       "ABLOCK",
       "ASTART",
       "ASTOP",
       "AUNBLOCK",
       "BREAK",
       "CLOSE",
       "DO",
       "ELSE",
       "FOR",
       "GOTO",
       "HALT",
       "HANG",
       "IF",
       "JOB",
       "KILL",
       "KSUBSCRIPTS",
       "KVALUE",
       "LOCK",
       "MERGE",
       "NEW",
       "OPEN",
       "QUIT",
       "READ",
       "SET",
       "TCOMMIT",
       "THEN",
       "TROLLBACK",
       "TSTART",
       "USE",
       "VIEW",
       "WRITE",
       "XECUTE",
       "ZASSERT",
       "ZBREAK",
       "ZCONST",
       "ZEDIT",
       "ZGOTO",
       "ZHALT",
       "ZINSERT",
       "ZJOB",
       "ZLOAD",
       "ZMAP",
       "ZNEW",
       "ZPRINT",
       "ZQUIT",
       "ZREMOVE",
       "ZSAVE",
       "ZTHROW",
       "ZTRAP",
       "ZUNMAP",
       "ZWATCH",
       "ZWITH",
       "ZWRITE",
       NULL
   };
   
   char **command_completion(const char *, int, int);
   char *command_generator(const char *, int);
   
   char **command_completion(const char *text, int start, int end)
   {
       if (start > 0) return NULL;
       rl_attempted_completion_over = 1;
       return rl_completion_matches(text, command_generator);
   }
   
   char *command_generator(const char *text, int state)
   {
       static int list_index, len;
       char *name;
   
       if (!state) {
           list_index = 0;
           len = strlen(text);
       }
   
       while ((name = m_commands[list_index++])) {
           if (strncmp(name, text, len) == 0) {
               return strdup(name);
           }
       }
   
       return NULL;
   }
   #endif
   
 /*  /*
  * xecline():   * xecline():
  *   typ (where to go on function entry):   1 = restart   *   typ (where to go on function entry):   1 = restart
Line 261  next_line:          /* entry point for n Line 438  next_line:          /* entry point for n
     if (debug_mode) {      if (debug_mode) {
         debug_mode = debugger (DEBENTRY_LINE, entryref);          debug_mode = debugger (DEBENTRY_LINE, entryref);
     }      }
       
     job_set_status (pid, JSTAT_INTERPRETER);      job_set_status (pid, JSTAT_INTERPRETER);
           
     if (then_ctr > 0) {      if (then_ctr > 0) {
Line 534  next0: Line 711  next0:
         if (ch == '!') {           /* UNIXCALL */          if (ch == '!') {           /* UNIXCALL */
   
             if (restricted_mode) {              if (restricted_mode) {
                 merr_raise (NOSTAND);                  merr_raise (CMMND);
                 goto err;                  goto err;
             }              }
                           
Line 4537  use_socket: Line 4714  use_socket:
                 if (k > MAXSEQ) goto open_socket;                  if (k > MAXSEQ) goto open_socket;
   
                 if (restricted_mode) {                  if (restricted_mode) {
                     merr_raise (NOSTAND);                      merr_raise (CMMND);
                     goto err;                      goto err;
                 }                  }
   
Line 5289  halt: Line 5466  halt:
             break;              break;
   
         /* Z-COMMANDS */          /* Z-COMMANDS */
           case ZEDIT:
               merr_raise (cmd_zedit (&ra));
               MRESCHECK(ra);
               break;
               
         case ZGO:          case ZGO:
   
             /* ZGO with arguments: same as GOTO but with BREAK on */              /* ZGO with arguments: same as GOTO but with BREAK on */
Line 5428  zgo: Line 5610  zgo:
                     merr_raise (NOPGM);                      merr_raise (NOPGM);
   
                     break;                      break;
                 }           /*error */                  }           /* error */
   
                 stcpy (varnam, rou_name);                  stcpy (varnam, rou_name);
             }              }
Line 5446  zgo: Line 5628  zgo:
             }              }
   
             zsave (varnam);              zsave (varnam);
               ssvn_routine_update ();
             break;              break;
   
   
Line 5564  zgo: Line 5747  zgo:
                 if (*codptr == EOL || *codptr == SP) {                  if (*codptr == EOL || *codptr == SP) {
                     merr_raise (ARGLIST);                      merr_raise (ARGLIST);
                     break;                      break;
                 }           /*error */                  }           /* error */
                                   
                 dosave[0] = EOL;                  dosave[0] = EOL;
   
                 /* parse stringlit */                  /* parse strlit */
                 expr (STRING);                  expr (STRING);
                                   
                 if (merr () > OK) break;                  if (merr () > OK) break;
Line 5677  zgo: Line 5860  zgo:
                     }                      }
                                           
                     if ((*(beg + 1)) == EOL) break;                      if ((*(beg + 1)) == EOL) break;
                       
                     write_m (beg + 1);                      write_m (beg + 1);
                     if (merr () > OK) break;                      if (merr () > OK) break;
                 }                  }
Line 7279  direct_mode: Line 7462  direct_mode:
                 int hist_idx;                  int hist_idx;
                 HIST_ENTRY *hist_ent;                  HIST_ENTRY *hist_ent;
   
                   rl_attempted_completion_function = command_completion;
                   
                 if (quiet_mode == FALSE) {                  if (quiet_mode == FALSE) {
                     if (tp_level == 0) {                      if (tp_level == 0) {
                         snprintf (fmrl_prompt, sizeof (fmrl_prompt) - 1, "\r\n%s.%s> ", shm_env, nsname);                          snprintf (fmrl_prompt, sizeof (fmrl_prompt) - 1, "\r\n%s.%s> ", shm_env, nsname);
Line 7316  direct_mode: Line 7501  direct_mode:
                     char kb[20];                      char kb[20];
                     char db[STRLEN];                      char db[STRLEN];
                                           
                     snprintf (kb, sizeof (kb) - 1, "%%SYS.HLP\201");                      snprintf (kb, sizeof (kb) - 1, "%%SYSHLP\201");
                     snprintf (db, STRLEN - 1, "\201");                      snprintf (db, STRLEN - 1, "\201");
   
                     symtab (kill_sym, kb, db);                      symtab (kill_sym, kb, db);

Removed from v.1.23  
changed lines
  Added in v.1.30


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