123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- #include "slatec-internal.hpp"
- static integer const c__2 = 2;
- static integer const c__0 = 0;
- static logical c_false = FALSE_;
- static integer const c__4 = 4;
- static integer c_n1 = -1;
- static integer const c__72 = 72;
- static integer const c__1 = 1;
- static logical c_true = TRUE_;
- int xermsg_(char const *librar, char const *subrou, char const *messg,
- integer const *nerr, integer const *level,
- ftnlen const librar_len, ftnlen const subrou_len, ftnlen const messg_len)
- {
-
- address a__1[2];
- integer i__1, i__2, i__3[2];
- char ch__1[87];
- icilist ici__1;
-
- integer i__, lerr;
- char temp[72];
- char xlibr[8];
- integer ltemp, kount;
- char xsubr[8];
- integer llevel, maxmes;
- char lfirst[20];
- integer lkntrl, kdummy;
- integer mkntrl;
- lkntrl = j4save_(&c__2, &c__0, &c_false);
- maxmes = j4save_(&c__4, &c__0, &c_false);
- if (*nerr < -9999999 || *nerr > 99999999 || *nerr == 0 || *level < -1 || *
- level > 2) {
- xerprn_(" ***", &c_n1, "FATAL ERROR IN...$$ XERMSG -- INVALID ERROR \
- NUMBER OR LEVEL$$ JOB ABORT DUE TO FATAL ERROR.", &c__72, (ftnlen)4, (ftnlen)
- 91);
- xersve_(" ", " ", " ", &c__0, &c__0, &c__0, &kdummy, (ftnlen)1, (
- ftnlen)1, (ftnlen)1);
- xerhlt_(" ***XERMSG -- INVALID INPUT", (ftnlen)27);
- return 0;
- }
- i__ = j4save_(&c__1, nerr, &c_true);
- xersve_(librar, subrou, messg, &c__1, nerr, level, &kount, librar_len,
- subrou_len, messg_len);
- if (*level == -1 && kount > 1) {
- return 0;
- }
- f2c::s_copy(xlibr, librar, (ftnlen)8, librar_len);
- f2c::s_copy(xsubr, subrou, (ftnlen)8, subrou_len);
- f2c::s_copy(lfirst, messg, (ftnlen)20, messg_len);
- lerr = *nerr;
- llevel = *level;
- xercnt_(xlibr, xsubr, lfirst, &lerr, &llevel, &lkntrl, (ftnlen)8, (ftnlen)
- 8, (ftnlen)20);
- i__1 = -2, i__2 = min(2,lkntrl);
- lkntrl = max(i__1,i__2);
- mkntrl = abs(lkntrl);
- if (*level < 2 && lkntrl == 0) {
- goto L30;
- }
- if (*level == 0 && kount > maxmes) {
- goto L30;
- }
- if (*level == 1 && kount > maxmes && mkntrl == 1) {
- goto L30;
- }
- if (*level == 2 && kount > max(1,maxmes)) {
- goto L30;
- }
- if (lkntrl != 0) {
- f2c::s_copy(temp, "MESSAGE FROM ROUTINE ", (ftnlen)21, (ftnlen)21);
- i__1 = f2c::i_len(subrou, subrou_len);
- i__ = min(i__1,16);
- f2c::s_copy(temp + 21, subrou, i__, i__);
- i__1 = i__ + 21;
- f2c::s_copy(temp + i__1, " IN LIBRARY ", i__ + 33 - i__1, (ftnlen)12);
- ltemp = i__ + 33;
- i__1 = f2c::i_len(librar, librar_len);
- i__ = min(i__1,16);
- i__1 = ltemp;
- f2c::s_copy(temp + i__1, librar, ltemp + i__ - i__1, i__);
- i__1 = ltemp + i__;
- f2c::s_copy(temp + i__1, ".", ltemp + i__ + 1 - i__1, (ftnlen)1);
- ltemp = ltemp + i__ + 1;
- xerprn_(" ***", &c_n1, temp, &c__72, (ftnlen)4, ltemp);
- }
- if (lkntrl > 0) {
- if (*level <= 0) {
- f2c::s_copy(temp, "INFORMATIVE MESSAGE,", (ftnlen)20, (ftnlen)20);
- ltemp = 20;
- } else if (*level == 1) {
- f2c::s_copy(temp, "POTENTIALLY RECOVERABLE ERROR,", (ftnlen)30, (
- ftnlen)30);
- ltemp = 30;
- } else {
- f2c::s_copy(temp, "FATAL ERROR,", (ftnlen)12, (ftnlen)12);
- ltemp = 12;
- }
- if (mkntrl == 2 && *level >= 1 || mkntrl == 1 && *level == 2) {
- i__1 = ltemp;
- f2c::s_copy(temp + i__1, " PROG ABORTED,", ltemp + 14 - i__1, (ftnlen)
- 14);
- ltemp += 14;
- } else {
- i__1 = ltemp;
- f2c::s_copy(temp + i__1, " PROG CONTINUES,", ltemp + 16 - i__1, (
- ftnlen)16);
- ltemp += 16;
- }
- if (lkntrl > 0) {
- i__1 = ltemp;
- f2c::s_copy(temp + i__1, " TRACEBACK REQUESTED", ltemp + 20 - i__1, (
- ftnlen)20);
- ltemp += 20;
- } else {
- i__1 = ltemp;
- f2c::s_copy(temp + i__1, " TRACEBACK NOT REQUESTED", ltemp + 24 - i__1,
- (ftnlen)24);
- ltemp += 24;
- }
- xerprn_(" ***", &c_n1, temp, &c__72, (ftnlen)4, ltemp);
- }
- xerprn_(" * ", &c_n1, messg, &c__72, (ftnlen)4, messg_len);
- if (lkntrl > 0) {
- ici__1.icierr = 0;
- ici__1.icirnum = 1;
- ici__1.icirlen = 72;
- ici__1.iciunit = temp;
- ici__1.icifmt = "('ERROR NUMBER = ', I8)";
- f2c::s_wsfi(&ici__1);
- f2c::do_fio(&c__1, (char *)&(*nerr), (ftnlen)sizeof(integer));
- f2c::e_wsfi();
- for (i__ = 16; i__ <= 22; ++i__) {
- if (*(unsigned char *)&temp[i__ - 1] != ' ') {
- goto L20;
- }
- }
- L20:
- i__3[0] = 15, a__1[0] = temp;
- i__3[1] = 23 - (i__ - 1), a__1[1] = temp + (i__ - 1);
- f2c::s_cat(ch__1, a__1, i__3, &c__2, (ftnlen)87);
- xerprn_(" * ", &c_n1, ch__1, &c__72, (ftnlen)4, 23 - (i__ - 1) + 15);
- fdump_();
- }
- if (lkntrl != 0) {
- xerprn_(" * ", &c_n1, " ", &c__72, (ftnlen)4, (ftnlen)1);
- xerprn_(" ***", &c_n1, "END OF MESSAGE", &c__72, (ftnlen)4, (ftnlen)
- 14);
- xerprn_(" ", &c__0, " ", &c__72, (ftnlen)4, (ftnlen)1);
- }
- L30:
- if (*level <= 0 || *level == 1 && mkntrl <= 1) {
- return 0;
- }
- if (lkntrl > 0 && kount < max(1,maxmes)) {
- if (*level == 1) {
- xerprn_(" ***", &c_n1, "JOB ABORT DUE TO UNRECOVERED ERROR.", &
- c__72, (ftnlen)4, (ftnlen)35);
- } else {
- xerprn_(" ***", &c_n1, "JOB ABORT DUE TO FATAL ERROR.", &c__72, (
- ftnlen)4, (ftnlen)29);
- }
- xersve_(" ", " ", " ", &c_n1, &c__0, &c__0, &kdummy, (ftnlen)1, (
- ftnlen)1, (ftnlen)1);
- xerhlt_(" ", (ftnlen)1);
- } else {
- xerhlt_(messg, messg_len);
- }
- return 0;
- }
|