123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- #include "slatec-internal.hpp"
- static integer const c__4 = 4;
- static integer const c__1 = 1;
- int xerprn_(char const *prefix, integer const *npref, char const *messg,
- integer const *nwrap, ftnlen prefix_len, ftnlen messg_len)
- {
-
- integer i__1, i__2;
- cilist ci__1;
-
- integer i__, n, iu[5];
- char cbuff[148];
- integer lpref, nextc, lwrap, nunit;
- integer lpiece, idelta, lenmsg;
- xgetua_(iu, &nunit);
- n = i1mach_(4);
- i__1 = nunit;
- for (i__ = 1; i__ <= i__1; ++i__) {
- if (iu[i__ - 1] == 0) {
- iu[i__ - 1] = n;
- }
- }
- if (*npref < 0) {
- lpref = f2c::i_len(prefix, prefix_len);
- } else {
- lpref = *npref;
- }
- lpref = min(16,lpref);
- if (lpref != 0) {
- f2c::s_copy(cbuff, prefix, lpref, prefix_len);
- }
- i__1 = 16, i__2 = min(132,*nwrap);
- lwrap = max(i__1,i__2);
- lenmsg = f2c::i_len(messg, messg_len);
- n = lenmsg;
- i__1 = n;
- for (i__ = 1; i__ <= i__1; ++i__) {
- if (*(unsigned char *)&messg[lenmsg - 1] != ' ') {
- goto L30;
- }
- --lenmsg;
- }
- L30:
- if (lenmsg == 0) {
- i__1 = lpref;
- f2c::s_copy(cbuff + i__1, " ", lpref + 1 - i__1, (ftnlen)1);
- i__1 = nunit;
- for (i__ = 1; i__ <= i__1; ++i__) {
- ci__1.cierr = 0;
- ci__1.ciunit = iu[i__ - 1];
- ci__1.cifmt = "(A)";
- f2c::s_wsfe(&ci__1);
- f2c::do_fio(&c__1, cbuff, lpref + 1);
- f2c::e_wsfe();
- }
- return 0;
- }
- nextc = 1;
- L50:
- lpiece = f2c::i_indx(messg + (nextc - 1), "$$", lenmsg - (nextc - 1), (ftnlen)
- 2);
- if (lpiece == 0) {
- idelta = 0;
- i__1 = lwrap, i__2 = lenmsg + 1 - nextc;
- lpiece = min(i__1,i__2);
- if (lpiece < lenmsg + 1 - nextc) {
- for (i__ = lpiece + 1; i__ >= 2; --i__) {
- i__1 = nextc + i__ - 2;
- if (f2c::s_cmp(messg + i__1, " ", nextc + i__ - 1 - i__1, (ftnlen) 1) == 0) {
- lpiece = i__ - 1;
- idelta = 1;
- goto L54;
- }
- }
- }
- L54:
- i__1 = lpref;
- f2c::s_copy(cbuff + i__1, messg + (nextc - 1), lpref + lpiece - i__1,
- nextc + lpiece - 1 - (nextc - 1));
- nextc = nextc + lpiece + idelta;
- } else if (lpiece == 1) {
- nextc += 2;
- goto L50;
- } else if (lpiece > lwrap + 1) {
- idelta = 0;
- lpiece = lwrap;
- for (i__ = lpiece + 1; i__ >= 2; --i__) {
- i__1 = nextc + i__ - 2;
- if (f2c::s_cmp(messg + i__1, " ", nextc + i__ - 1 - i__1, (ftnlen)1) ==
- 0) {
- lpiece = i__ - 1;
- idelta = 1;
- goto L58;
- }
- }
- L58:
- i__1 = lpref;
- f2c::s_copy(cbuff + i__1, messg + (nextc - 1), lpref + lpiece - i__1,
- nextc + lpiece - 1 - (nextc - 1));
- nextc = nextc + lpiece + idelta;
- } else {
- --lpiece;
- i__1 = lpref;
- f2c::s_copy(cbuff + i__1, messg + (nextc - 1), lpref + lpiece - i__1,
- nextc + lpiece - 1 - (nextc - 1));
- nextc = nextc + lpiece + 2;
- }
- i__1 = nunit;
- for (i__ = 1; i__ <= i__1; ++i__) {
- ci__1.cierr = 0;
- ci__1.ciunit = iu[i__ - 1];
- ci__1.cifmt = "(A)";
- f2c::s_wsfe(&ci__1);
- f2c::do_fio(&c__1, cbuff, lpref + lpiece);
- f2c::e_wsfe();
- }
- if (nextc <= lenmsg) {
- goto L50;
- }
- return 0;
- }
|