From 482b6f1be419dd0ff2773602994c29b899ac5fff Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Mon, 6 Aug 2018 18:22:46 -0700 Subject: [PATCH] SCP: Add ELSE command extension to the IF command processing. --- README.md | 1 + doc/simh_doc.doc | Bin 323584 -> 323584 bytes scp.c | 42 ++++++++++++++++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index d36f3037..0606c016 100644 --- a/README.md +++ b/README.md @@ -360,6 +360,7 @@ Device simulator authors can easily schedule their device polling activities to ON Establish or cancel an ON condition dispatch IF Test some simulator state and conditionally execute commands IF (C-style-expression) Test some simulator state and conditionally execute commands + ELSE commands to execute when the previous IF wasn't true CD Change working directory SET DEFAULT Change working directory PWD Show working directory diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index bdc1dd1a2673a74dcb755f6edd6bb2db73fa8c9b..e3b6b1c5ce5525c81c929a2223e058110d5e0d58 100644 GIT binary patch delta 25875 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 delta 24831 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 diff --git a/scp.c b/scp.c index fd842b36..e0736cd1 100644 --- a/scp.c +++ b/scp.c @@ -591,6 +591,10 @@ static char *sim_on_actions[MAX_DO_NEST_LVL+1][SCPE_MAX_ERR+2]; static char sim_do_filename[MAX_DO_NEST_LVL+1][CBUFSIZE]; static const char *sim_do_ocptr[MAX_DO_NEST_LVL+1]; static const char *sim_do_label[MAX_DO_NEST_LVL+1]; +static t_bool sim_if_cmd[MAX_DO_NEST_LVL+1]; +static t_bool sim_if_cmd_last[MAX_DO_NEST_LVL+1]; +static t_bool sim_if_result[MAX_DO_NEST_LVL+1]; +static t_bool sim_if_result_last[MAX_DO_NEST_LVL+1]; t_stat sim_last_cmd_stat; /* Command Status */ struct timespec cmd_time; /* */ @@ -2030,6 +2034,8 @@ static const char simh_help[] = "++;\n" "++IF EXIST \"os.disk\" echo os.disk exists\n" "++IF NOT EXIST os.disk echo os.disk not existing\n" + "++IF EXIST \"os.disk\" echo os.disk exists\n" + "++ELSE echo os.disk not existing\n" "++ATTACH DS0 os.disk\n" "++BOOT DS\n" "++; A register contains error code; 0 = good boot\n" @@ -2042,10 +2048,11 @@ static const char simh_help[] = " be echoed, the command file will be aborted with an \"Assertion failed\"\n" " message. Otherwise, the command file will continue to bring up the\n" " operating system.\n" - "4IF\n" + "4IF-ELSE\n" " The IF command tests a simulator state condition and executes additional\n" " commands if the condition is true:\n\n" - "++IF commandtoprocess{; additionalcommandtoprocess}...\n\n" + "++IF commandtoprocess{; additionalcommandtoprocess}...\n" + "++{ELSE commandtoprocess{; additionalcommandtoprocess}...}\n\n" "5Examples:\n" " A command file might be used to bootstrap an operating system that\n" " halts after the initial load from disk. The ASSERT command is then\n" @@ -2232,6 +2239,7 @@ static CTAB cmd_table[] = { { "CALL", &call_cmd, 0, HLP_CALL }, { "ON", &on_cmd, 0, HLP_ON }, { "IF", &assert_cmd, 0, HLP_IF }, + { "ELSE", &assert_cmd, 2, HLP_IF }, { "PROCEED", &noop_cmd, 0, HLP_PROCEED }, { "IGNORE", &noop_cmd, 0, HLP_IGNORE }, { "ECHO", &echo_cmd, 0, HLP_ECHO }, @@ -2602,6 +2610,9 @@ while (stat != SCPE_EXIT) { /* in case exit */ fprintf (sim_log, "%s%s\n", sim_prompt, cptr); if (sim_deb && (sim_deb != sim_log) && (sim_deb != stdout)) fprintf (sim_deb, "%s%s\n", sim_prompt, cptr); + sim_if_cmd_last[sim_do_depth] = sim_if_cmd[sim_do_depth]; + sim_if_result_last[sim_do_depth] = sim_if_result[sim_do_depth]; + sim_if_result[sim_do_depth] = sim_if_cmd[sim_do_depth] = FALSE; cptr = get_glyph_cmd (cptr, gbuf); /* get command glyph */ sim_switches = 0; /* init switches */ if ((cmdp = find_cmd (gbuf))) /* lookup command */ @@ -3488,6 +3499,9 @@ do { sim_switches = 0; /* init switches */ sim_gotofile = fpin; sim_do_echo = echo; + sim_if_cmd_last[sim_do_depth] = sim_if_cmd[sim_do_depth]; + sim_if_result_last[sim_do_depth] = sim_if_result[sim_do_depth]; + sim_if_result[sim_do_depth] = sim_if_cmd[sim_do_depth] = FALSE; if ((cmdp = find_cmd (gbuf))) { /* lookup command */ if (cmdp->action == &return_cmd) /* RETURN command? */ break; /* done! */ @@ -4225,6 +4239,15 @@ cptr = (CONST char *)get_sim_opt (CMD_OPT_SW|CMD_OPT_DFT, (CONST char *)cptr, &r sim_stabr.boolop = sim_staba.boolop = -1; /* no relational op dflt */ if (*cptr == 0) /* must be more */ return SCPE_2FARG; +if (flag == 2) { /* ELSE command? */ + if (!sim_if_cmd_last[sim_do_depth]) + return sim_messagef (SCPE_UNK, "Invalid Command Sequence, ELSE not following IF\n"); + if (*cptr == '\0') /* no more? */ + return sim_messagef (SCPE_2FARG, "Missing ELSE commands\n"); + if (!sim_if_result_last[sim_do_depth]) + sim_brk_setact (cptr); /* set up ELSE actions */ + return SCPE_OK; + } tptr = get_glyph (cptr, gbuf, 0); /* get token */ if (!strcmp (gbuf, "NOT")) { /* Conditional Inversion? */ Not = TRUE; /* remember that, and */ @@ -4279,13 +4302,14 @@ if (Exist || (*gbuf == '"') || (*gbuf == '\'')) { /* quoted string compari ++cptr; cptr = _get_string (cptr, gbuf2, 0); /* get second string */ if (*cptr) { /* more? */ - if (flag) /* ASSERT has no more args */ + if (flag == 1) /* ASSERT has no more args */ return SCPE_2MARG; } else { - if (!flag) - return SCPE_2FARG; /* IF needs actions! */ + if (flag != 1) + return SCPE_2FARG; /* IF/ELSE needs actions! */ } + sim_if_cmd[sim_do_depth] = (flag == 0); /* record IF command */ result = sim_cmp_string (gbuf, gbuf2); result = ((result == optr->aval) || (result == optr->bval)); if (optr->invert) @@ -4293,8 +4317,10 @@ if (Exist || (*gbuf == '"') || (*gbuf == '\'')) { /* quoted string compari } else { FILE *f = fopen (gbuf, "r"); + if (f) fclose (f); + sim_if_cmd[sim_do_depth] = (flag == 0); /* record IF command */ result = (f != NULL); } } @@ -4369,12 +4395,16 @@ else { if ((cptr > sim_sub_instr_buf) && ((size_t)(cptr - sim_sub_instr_buf) < sim_sub_instr_size)) cptr = &sim_sub_instr[sim_sub_instr_off[cptr - sim_sub_instr_buf]]; /* get un-substituted string */ if (Not ^ result) { - if (!flag) + if (!flag) { sim_brk_setact (cptr); /* set up IF actions */ + sim_if_result[sim_do_depth] = TRUE; + } } else if (flag) return SCPE_AFAIL; /* return assert status */ + else + sim_if_result[sim_do_depth] = FALSE; return SCPE_OK; }