From f9ce5ae8ff350e8d8b248020bcb79d4a570438da Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Sun, 1 Nov 2020 16:27:47 -0800 Subject: [PATCH] SCP: Add whitespace ignore option to file and string content comparisons --- doc/simh_doc.doc | Bin 288768 -> 290304 bytes scp.c | 120 ++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 109 insertions(+), 11 deletions(-) diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index 6a13325b60632b6d71ac71e7e656d3db2946f4ae..8edf34030b0ff582feeaa487ad3fa5252cb942f2 100644 GIT binary patch delta 55693 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 delta 53293 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 Ob6M>xPo6RJ=llj4?g`%j diff --git a/scp.c b/scp.c index c496ad94..ce0a8254 100644 --- a/scp.c +++ b/scp.c @@ -2347,8 +2347,11 @@ static const char simh_help2[] = " file. Otherwise, the next command in the command file is processed.\n\n" "5String Comparison Expressions\n" " String Values can be compared with:\n" - "++{-i} {NOT} \"\"|EnVarName1 \"|EnvVarName2\"\n\n" + "++{-i}{-w} {NOT} \"\"|EnVarName1 \"|EnvVarName2\"\n\n" " The -i switch, if present, causes comparisons to be case insensitive.\n" + " The -w switch, if present, causes comparisons to allow arbitrary runs of\n" + " whitespace to be equivalent to a single space.\n" + " The -i and -w switches may be combined.\n" " and are quoted string values which may have\n" " environment variables substituted as desired.\n" " Either quoted string may alternatively be an environment variable name.\n" @@ -2376,9 +2379,11 @@ static const char simh_help2[] = " Specifies a true (false {NOT}) condition if the file exists.\n" "5File Comparison Expressions\n" " Files can have their contents compared with:\n\n" - "++-F {NOT} \"\" == \"\" \n\n" + "++-F{W} {NOT} \"\" == \"\" \n\n" " Specifies a true (false {NOT}) condition if the indicated files\n" - " have the same contents.\n\n" + " have the same contents. If the -W switch is present, allows\n" + " arbitrary runs of whitespace to be considered a single space\n" + " during file content comparison.\n\n" " When a file comparison determines that files are different, the environment\n" " variable _FILE_COMPARE_DIFF_OFFSET is set to the file offset where the first\n" " difference in the files was observed\n\n" @@ -3735,11 +3740,11 @@ if ((*cptr == '"') || (*cptr == '\'')) { cptr = (char *)dbuf; } if (lp) { - tmxr_linemsgf (lp, "%s%s", cptr, (sim_switches & SWMASK('N')) ? "" : "\r\n"); + tmxr_linemsgf (lp, "%s%s", cptr, (sim_switches & SWMASK ('N')) ? "" : "\r\n"); tmxr_send_buffered_data (lp); } else - sim_printf ("%s%s", cptr, (sim_switches & SWMASK('N')) ? "" : "\n"); + sim_printf ("%s%s", cptr, (sim_switches & SWMASK ('N')) ? "" : "\n"); return SCPE_OK; } @@ -4608,9 +4613,42 @@ if (sim_switches & SWMASK ('F')) { /* File Compare? */ fclose (f1); return 1; } - while (((c1 = fgetc (f1)) == (c2 = fgetc (f2))) && - (c1 != EOF)) - ++diff_offset; + if (sim_switches & SWMASK ('W')) { /* whitespace runs equivalent? */ + c1 = c2 = 0; + while ((c1 == c2) && (c1 != EOF)) { + if (c1 == ' ') { /* last character was space? */ + while (c1 == ' ') { /* read until not a space */ + c1 = fgetc (f1); + ++diff_offset; + if (sim_isspace (c1)) + c1 = ' '; /* all whitespace is a space */ + } + } + else { /* get new character */ + c1 = fgetc (f1); + ++diff_offset; + if (sim_isspace (c1)) + c1 = ' '; /* all whitespace is a space */ + } + if (c2 == ' ') { /* last character was space? */ + while (c2 == ' ') { /* read until not a space */ + c2 = fgetc (f2); + if (sim_isspace (c2)) + c2 = ' '; /* all whitespace is a space */ + } + } + else { /* get new character */ + c2 = fgetc (f2); + if (sim_isspace (c2)) + c2 = ' '; /* all whitespace is a space */ + } + }; + } + else { /* Binary File Compare */ + while (((c1 = fgetc (f1)) == (c2 = fgetc (f2))) && + (c1 != EOF)) + ++diff_offset; + } fclose (f1); fclose (f2); if (c1 != c2) { @@ -7445,7 +7483,7 @@ for (i = 0; i < start; i++) { } for (i = start; (dptr = sim_devices[i]) != NULL; i++) { sim_switches = saved_sim_switches; /* restore initial switches */ - if (sim_switches & SWMASK('P')) { + if (sim_switches & SWMASK ('P')) { tmxr_add_debug (dptr); /* Add TMXR debug to MUX devices */ sim_tape_add_debug (dptr); /* Add TAPE debug to TAPE devices */ } @@ -8891,7 +8929,7 @@ if ((dptr != NULL) && (dptr->examine != NULL)) { } if ((r == SCPE_OK) || (i > 0)) { fprintf (st, " ("); - if (fprint_sym (st, (t_addr) pcval, sim_eval, NULL, SWMASK('M')|SIM_SW_STOP) > 0) + if (fprint_sym (st, (t_addr) pcval, sim_eval, NULL, SWMASK ('M') | SIM_SW_STOP) > 0) fprint_val (st, sim_eval[0], dptr->dradix, dptr->dwidth, PV_RZRO); fprintf (st, ")"); } @@ -9978,6 +10016,64 @@ while (1) { return 0; } +int sim_strwhitecasecmp (const char *string1, const char *string2, t_bool casecmp) +{ +unsigned char s1 = 1, s2 = 1; /* start with equal, but not space */ + +while ((s1 == s2) && (s1 != '\0')) { + if (s1 == ' ') { /* last character was space? */ + while (s1 == ' ') { /* read until not a space */ + s1 = *string1++; + if (sim_isspace (s1)) + s1 = ' '; /* all whitespace is a space */ + else { + if (casecmp) + s1 = (unsigned char)sim_toupper (s1); + } + } + } + else { /* get new character */ + s1 = *string1++; + if (sim_isspace (s1)) + s1 = ' '; /* all whitespace is a space */ + else { + if (casecmp) + s1 = (unsigned char)sim_toupper (s1); + } + } + if (s2 == ' ') { /* last character was space? */ + while (s2 == ' ') { /* read until not a space */ + s2 = *string2++; + if (sim_isspace (s2)) + s2 = ' '; /* all whitespace is a space */ + else { + if (casecmp) + s2 = (unsigned char)sim_toupper (s2); + } + } + } + else { /* get new character */ + s2 = *string2++; + if (sim_isspace (s2)) + s2 = ' '; /* all whitespace is a space */ + else { + if (casecmp) + s2 = (unsigned char)sim_toupper (s2); + } + } + if (s1 == s2) { + if (s1 == 0) + return 0; + continue; + } + if (s1 < s2) + return -1; + if (s1 > s2) + return 1; + } +return 0; +} + /* strlcat() and strlcpy() are not available on all platforms */ /* Copyright (c) 1998 Todd C. Miller */ /* @@ -15055,7 +15151,9 @@ return data2 > data1; static int _i_strcmp (const char *s1, const char *s2) { -return ((sim_switches & SWMASK('I')) ? strcasecmp (s2, s1) : strcmp (s2, s1)); +if (sim_switches & SWMASK ('W')) /* Whitespace compress? */ + return sim_strwhitecasecmp (s1, s2, sim_switches & SWMASK ('I')); +return ((sim_switches & SWMASK ('I')) ? strcasecmp (s2, s1) : strcmp (s2, s1)); } static t_svalue _op_str_eq (const char *str1, const char *str2)