diff --git a/pub/lib/file_in.cpp b/pub/lib/file_in.cpp index 4024c67c6ba238044b9f36d9f8fd33ccee84692f..e5b113d63124e300eb094de3bd36d0912ae1fe54 100644 --- a/pub/lib/file_in.cpp +++ b/pub/lib/file_in.cpp @@ -499,75 +499,78 @@ void NFileIn::Load_96(FILE* F_in, string fshort) // Read block 1 = format tag. if (!triv::freadln(F_in, &lin)) throw "file empty or starting with empty line"; - if (lin != string("ASCII-96")) + if (lin != "ASCII-96") throw ".i96 file starts with illegal header [" + lin + "]"; // Read block 2: string parameters. - if (!triv::freadln(F_in, &lin) || lin.length() < 9 || lin.substr(0, 9) != string("(a24,a56)")) + if (!triv::freadln(F_in, &lin) || lin.length() < 9 || lin.substr(0, 9) != "(a24,a56)") throw "no valid intro to block 2"; - if (!triv::freadln(F_in, &lin) || lin.length() < 24 || lin.substr(0, 3) != string("fil")) + if (!triv::freadln(F_in, &lin) || lin.length() < 24 || lin.substr(0, 3) != "fil") throw "tag 'fil' not found in block 2"; if (triv::strip(lin.substr(24)) != fshort) { cout << "warning: i96 file '" << fshort << "' renamed from '" << lin.substr(24) << "'\n"; } - if (!triv::freadln(F_in, &lin) || lin.length() < 24 || lin.substr(0, 3) != string("tit")) + if (!triv::freadln(F_in, &lin) || lin.length() < 24 || lin.substr(0, 3) != "tit") throw "tag 'tit' not found in block 2"; fout->lDoc.push_back(triv::strip(lin.substr(24))); - while (triv::freadln(F_in, &lin) && lin.length() >= 3 && lin.substr(0, 3) == string("doc")) + while (triv::freadln(F_in, &lin) && lin.length() >= 3 && lin.substr(0, 3) == "doc") if (lin.length() >= 24) fout->lDoc.push_back(triv::strip(lin.substr(24))); - if (lin.substr(0, 3) != string("dir")) + if (lin.substr(0, 3) != "dir") throw "tag 'dir' not found in block 2, line '" + lin + "'"; while (triv::freadln(F_in, &lin) - && !(lin.length() >= 6 && lin.substr(0, 6) == string("&eob 2"))) + && !(lin.length() >= 6 && lin.substr(0, 6) == "&eob 2")) ; // Read block 3: integer parameters. if (!triv::freadln(F_in, &lin)) throw "missed &eob 2"; - if (lin.length() < 9 || lin.substr(0, 9) != string("(a24,i16)")) + if (lin.length() < 9 || lin.substr(0, 9) != "(a24,i16)") throw "no valid intro to block 3"; while (triv::freadln(F_in, &lin) - && !(lin.length() >= 6 && lin.substr(0, 6) == string("&eob 3"))) + && !(lin.length() >= 6 && lin.substr(0, 6) == "&eob 3")) ; // Read block 4: floating-point parameters. if (!triv::freadln(F_in, &lin)) throw "missed &eob 3"; - if (lin.length() < 16 || lin.substr(0, 16) != string("(a24,a24,g20.10)")) + if (lin.length() < 16 || lin.substr(0, 16) != "(a24,a24,g20.10)") throw "Intro to block 4 is invalid :'" + lin + "'"; - while (triv::freadln(F_in, &lin) && lin.length() >= 48 && lin.substr(0, 4) != string("&eob")) { - if (sscanf(lin.substr(48).c_str(), "%lg", &r0) != 1) - throw "no real value in rpar line"; - fout->RPar.push_back(CParam(lin.substr(0, 24), lin.substr(24, 24), r0)); + while (triv::freadln(F_in, &lin) && !(lin.length() >= 4 && lin.substr(0, 4)=="&eob")) { + if (lin.length()<=48 || sscanf(lin.substr(48).c_str(), "%lg", &r0) != 1) + cout << "warning: file " << fshort << " has empty rpar " << lin.substr(0, 16) << "\n"; + else + fout->RPar.push_back(CParam(lin.substr(0, 24), lin.substr(24, 24), r0)); } // Read block 5: coordinate names and units. - if (lin.substr(0, 6) != string("&eob 4")) + if (lin.substr(0, 6) != "&eob 4") throw "no valid eob 4"; if (!triv::freadln(F_in, &lin) || lin.length() < 9 - || lin.substr(0, 12) != string("(a4,a24,a24)")) + || lin.substr(0, 12) != "(a4,a24,a24)") throw "no valid intro to block 5"; - if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != string("x")) + if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != "x") throw "no x coordinate"; fout->xco = CCoord(triv::strip(lin.substr(4, 24)), lin.length()>28 ? triv::strip(lin.substr(28, 24)) : ""); - if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != string("y")) + if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != "y") throw "no y coordinate"; fout->yco = CCoord(triv::strip(lin.substr(4, 24)), lin.length()>28 ? triv::strip(lin.substr(28, 24)) : ""); - if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 1) != string("z")) - throw "no z coordinate"; - fout->ZCo.push_back(CCoord(triv::strip(lin.substr(4, 24)), - lin.length()>28 ? triv::strip(lin.substr(28, 24)) : "")); + while (triv::freadln(F_in, &lin) && !(lin.length() >= 4 && lin.substr(0, 4)=="&eob")) { + if (lin.length()<=4 || lin.substr(0, 1) != "z") + throw "no z coordinate"; + fout->ZCo.push_back(CCoord(triv::strip(lin.substr(4, 24)), + lin.length()>28 ? triv::strip(lin.substr(28, 24)) : "")); + } // Read block 6: history. - if (!triv::freadln(F_in, &lin) || lin.length() < 6 || lin.substr(0, 6) != string("&eob 5")) + if (lin.length() < 6 || lin.substr(0, 6) != "&eob 5") throw "no valid eob 5"; - if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 5) != string("(a80)")) + if (!triv::freadln(F_in, &lin) || lin.length() < 5 || lin.substr(0, 5) != "(a80)") throw "no valid intro to block 6"; while (triv::freadln(F_in, &lin) > 0 - && !(lin.length() >= 6 && lin.substr(0, 6) == string("&eob 6"))) + && !(lin.length() >= 6 && lin.substr(0, 6) == "&eob 6")) fout->lDoc.push_back(lin); // Read block 7 = spectra. @@ -581,7 +584,7 @@ void NFileIn::Load_96(FILE* F_in, string fshort) for (int j = 0; j < nspec; ++j) { sout = PSpec(new CSpec); if (!triv::freadln(F_in, &lin) || lin.length() < 10 - || lin.substr(0, 9) != string("&spectrum") + || lin.substr(0, 9) != "&spectrum" || sscanf(lin.substr(10).c_str(), "%i", &ival) != 1 || ival != j + 1) throw "no valid intro to spectrum"; if (!triv::freadln(F_in, &lin) || sscanf(lin.c_str(), "%i %lg", &n, &r0) != 2) diff --git a/pub/lib/toplevel.cpp b/pub/lib/toplevel.cpp index 350192fbf93eeaacb3277cc311689de6f3f05e92..c73cbe90662cf815950d5327d03b79b6324dd38e 100644 --- a/pub/lib/toplevel.cpp +++ b/pub/lib/toplevel.cpp @@ -187,7 +187,7 @@ void CFrida::interactive() cout << "'" << cmdline << "' failed:\n " << ex << "\n"; NMacro::clear(); } catch (const char* ex) { - cout << "BUG: '" << cmdline << "' failed with unforeseen message:\n " << ex << "\n"; + cout << "'" << cmdline << "' failed:\n " << ex << "\n"; NMacro::clear(); } catch (std::exception& ex) { cout << "BUG: '" << cmdline << "' failed with unforeseen std exception:\n "