--- freem/src/xecline.c 2025/05/19 21:29:29 1.27 +++ freem/src/xecline.c 2025/05/20 18:07:41 1.31 @@ -1,5 +1,5 @@ /* - * $Id: xecline.c,v 1.27 2025/05/19 21:29:29 snw Exp $ + * $Id: xecline.c,v 1.31 2025/05/20 18:07:41 snw Exp $ * freem interpreter proper * * @@ -24,6 +24,18 @@ * along with FreeM. If not, see . * * $Log: xecline.c,v $ + * Revision 1.31 2025/05/20 18:07:41 snw + * Add completion to debugger + * + * 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 * @@ -188,116 +200,128 @@ 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 + "?", + "@", + "!<", + "!>", + "!!", + "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); @@ -307,7 +331,7 @@ char **command_completion(const char *te { if (start > 0) return NULL; rl_attempted_completion_over = 1; - return rl_completion_matches(text, command_generator); + return rl_completion_matches (text, command_generator); } char *command_generator(const char *text, int state) @@ -317,12 +341,12 @@ char *command_generator(const char *text if (!state) { list_index = 0; - len = strlen(text); + len = strlen (text); } while ((name = m_commands[list_index++])) { - if (strncmp(name, text, len) == 0) { - return strdup(name); + if (strncmp (name, text, len) == 0) { + return strdup (name); } } @@ -690,7 +714,7 @@ next0: if (ch == '!') { /* UNIXCALL */ if (restricted_mode) { - merr_raise (NOSTAND); + merr_raise (CMMND); goto err; } @@ -4693,7 +4717,7 @@ use_socket: if (k > MAXSEQ) goto open_socket; if (restricted_mode) { - merr_raise (NOSTAND); + merr_raise (CMMND); goto err; } @@ -5607,6 +5631,7 @@ zgo: } zsave (varnam); + ssvn_routine_update (); break; @@ -5838,7 +5863,7 @@ zgo: } if ((*(beg + 1)) == EOL) break; - + write_m (beg + 1); if (merr () > OK) break; } @@ -7479,7 +7504,7 @@ direct_mode: char kb[20]; char db[STRLEN]; - snprintf (kb, sizeof (kb) - 1, "%%SYS.HLP\201"); + snprintf (kb, sizeof (kb) - 1, "%%SYSHLP\201"); snprintf (db, STRLEN - 1, "\201"); symtab (kill_sym, kb, db);