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

version 1.23, 2025/05/06 16:10:06 version 1.27, 2025/05/19 21:29:29
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.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 186  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",
     "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",
     "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 417  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 5289  halt: Line 5445  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 5589  zgo:
                     merr_raise (NOPGM);                      merr_raise (NOPGM);
   
                     break;                      break;
                 }           /*error */                  }           /* error */
   
                 stcpy (varnam, rou_name);                  stcpy (varnam, rou_name);
             }              }
Line 5564  zgo: Line 5725  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 7279  direct_mode: Line 7440  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);

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


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