|
|
| version 1.27, 2025/05/19 21:29:29 | version 1.32, 2026/03/19 19:03:58 |
|---|---|
| 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.32 2026/03/19 19:03:58 snw | |
| * Attempt to rectify terminal corruption problem when the user performs a gracious exit | |
| * | |
| * 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 | * Revision 1.27 2025/05/19 21:29:29 snw |
| * Add basic tab completion to direct mode | * Add basic tab completion to direct mode |
| * | * |
| Line 188 short is_standard(void); | Line 203 short is_standard(void); |
| #ifdef HAVE_LIBREADLINE | #ifdef HAVE_LIBREADLINE |
| char *m_commands[] = { | char *m_commands[] = { |
| "@", | "?", |
| "!", | "@", |
| "!!", | "!<", |
| "ablock", | "!>", |
| "astart", | "!!", |
| "astop", | "ablock", |
| "aunblock", | "astart", |
| "break", | "astop", |
| "close", | "aunblock", |
| "do", | "break", |
| "else", | "close", |
| "for", | "do", |
| "goto", | "else", |
| "halt", | "events", |
| "hang", | "for", |
| "if", | "goto", |
| "job", | "halt", |
| "kill", | "hang", |
| "ksubscripts", | "history", |
| "kvalue", | "if", |
| "lock", | "job", |
| "merge", | "jobtab", |
| "new", | "kill", |
| "open", | "ksubscripts", |
| "quit", | "kvalue", |
| "read", | "lock", |
| "set", | "locktab", |
| "tcommit", | "merge", |
| "then", | "new", |
| "trollback", | "open", |
| "tstart", | "quit", |
| "use", | "rbuf", |
| "view", | "rcl", |
| "write", | "read", |
| "xecute", | "set", |
| "zassert", | "shmpages", |
| "zbreak", | "shmstat", |
| "zconst", | "tcommit", |
| "zedit", | "then", |
| "zgoto", | "trantab", |
| "zhalt", | "trollback", |
| "zinsert", | "tstart", |
| "zjob", | "use", |
| "zload", | "view", |
| "zmap", | "wh", |
| "znew", | "write", |
| "zprint", | "xecute", |
| "zquit", | "zassert", |
| "zremove", | "zbreak", |
| "zsave", | "zconst", |
| "zthrow", | "zedit", |
| "ztrap", | "zgoto", |
| "zunmap", | "zhalt", |
| "zwatch", | "zinsert", |
| "zwith", | "zjob", |
| "zwrite", | "zload", |
| "ABLOCK", | "zmap", |
| "ASTART", | "znew", |
| "ASTOP", | "zprint", |
| "AUNBLOCK", | "zquit", |
| "BREAK", | "zremove", |
| "CLOSE", | "zsave", |
| "DO", | "zthrow", |
| "ELSE", | "ztrap", |
| "FOR", | "zunmap", |
| "GOTO", | "zwatch", |
| "HALT", | "zwith", |
| "HANG", | "zwrite", |
| "IF", | "ABLOCK", |
| "JOB", | "ASTART", |
| "KILL", | "ASTOP", |
| "KSUBSCRIPTS", | "AUNBLOCK", |
| "KVALUE", | "BREAK", |
| "LOCK", | "CLOSE", |
| "MERGE", | "DO", |
| "NEW", | "ELSE", |
| "OPEN", | "FOR", |
| "QUIT", | "GOTO", |
| "READ", | "HALT", |
| "SET", | "HANG", |
| "TCOMMIT", | "IF", |
| "THEN", | "JOB", |
| "TROLLBACK", | "KILL", |
| "TSTART", | "KSUBSCRIPTS", |
| "USE", | "KVALUE", |
| "VIEW", | "LOCK", |
| "WRITE", | "MERGE", |
| "XECUTE", | "NEW", |
| "ZASSERT", | "OPEN", |
| "ZBREAK", | "QUIT", |
| "ZCONST", | "READ", |
| "ZEDIT", | "SET", |
| "ZGOTO", | "TCOMMIT", |
| "ZHALT", | "THEN", |
| "ZINSERT", | "TROLLBACK", |
| "ZJOB", | "TSTART", |
| "ZLOAD", | "USE", |
| "ZMAP", | "VIEW", |
| "ZNEW", | "WRITE", |
| "ZPRINT", | "XECUTE", |
| "ZQUIT", | "ZASSERT", |
| "ZREMOVE", | "ZBREAK", |
| "ZSAVE", | "ZCONST", |
| "ZTHROW", | "ZEDIT", |
| "ZTRAP", | "ZGOTO", |
| "ZUNMAP", | "ZHALT", |
| "ZWATCH", | "ZINSERT", |
| "ZWITH", | "ZJOB", |
| "ZWRITE", | "ZLOAD", |
| NULL | "ZMAP", |
| "ZNEW", | |
| "ZPRINT", | |
| "ZQUIT", | |
| "ZREMOVE", | |
| "ZSAVE", | |
| "ZTHROW", | |
| "ZTRAP", | |
| "ZUNMAP", | |
| "ZWATCH", | |
| "ZWITH", | |
| "ZWRITE", | |
| NULL | |
| }; | }; |
| char **command_completion(const char *, int, int); | char **command_completion(const char *, int, int); |
| Line 307 char **command_completion(const char *te | Line 334 char **command_completion(const char *te |
| { | { |
| if (start > 0) return NULL; | if (start > 0) return NULL; |
| rl_attempted_completion_over = 1; | 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) | char *command_generator(const char *text, int state) |
| Line 317 char *command_generator(const char *text | Line 344 char *command_generator(const char *text |
| if (!state) { | if (!state) { |
| list_index = 0; | list_index = 0; |
| len = strlen(text); | len = strlen (text); |
| } | } |
| while ((name = m_commands[list_index++])) { | while ((name = m_commands[list_index++])) { |
| if (strncmp(name, text, len) == 0) { | if (strncmp (name, text, len) == 0) { |
| return strdup(name); | return strdup (name); |
| } | } |
| } | } |
| Line 690 next0: | Line 717 next0: |
| if (ch == '!') { /* UNIXCALL */ | if (ch == '!') { /* UNIXCALL */ |
| if (restricted_mode) { | if (restricted_mode) { |
| merr_raise (NOSTAND); | merr_raise (CMMND); |
| goto err; | goto err; |
| } | } |
| Line 4693 use_socket: | Line 4720 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 5129 halt: | Line 5156 halt: |
| i = 0; | i = 0; |
| } | } |
| set_io (UNIX); | |
| cleanup (); | cleanup (); |
| if (father) { /* advertise death to parent *//* make sure father is waiting !!! */ | if (father) { /* advertise death to parent *//* make sure father is waiting !!! */ |
| Line 5607 zgo: | Line 5635 zgo: |
| } | } |
| zsave (varnam); | zsave (varnam); |
| ssvn_routine_update (); | |
| break; | break; |
| Line 5838 zgo: | Line 5867 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 7479 direct_mode: | Line 7508 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); |