Chris@202: /* Unless compiled with -DNO_OVERWRITE, this variant of s_copy allows the Chris@202: * target of an assignment to appear on its right-hand side (contrary Chris@202: * to the Fortran 77 Standard, but in accordance with Fortran 90), Chris@202: * as in a(2:5) = a(4:7) . Chris@202: */ Chris@202: Chris@202: #include "f2c.h" Chris@202: #ifdef __cplusplus Chris@202: extern "C" { Chris@202: #endif Chris@202: Chris@202: /* assign strings: a = b */ Chris@202: Chris@202: #ifdef KR_headers Chris@202: VOID s_copy(a, b, la, lb) register char *a, *b; ftnlen la, lb; Chris@202: #else Chris@202: void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb) Chris@202: #endif Chris@202: { Chris@202: register char *aend, *bend; Chris@202: Chris@202: aend = a + la; Chris@202: Chris@202: if(la <= lb) Chris@202: #ifndef NO_OVERWRITE Chris@202: if (a <= b || a >= b + la) Chris@202: #endif Chris@202: while(a < aend) Chris@202: *a++ = *b++; Chris@202: #ifndef NO_OVERWRITE Chris@202: else Chris@202: for(b += la; a < aend; ) Chris@202: *--aend = *--b; Chris@202: #endif Chris@202: Chris@202: else { Chris@202: bend = b + lb; Chris@202: #ifndef NO_OVERWRITE Chris@202: if (a <= b || a >= bend) Chris@202: #endif Chris@202: while(b < bend) Chris@202: *a++ = *b++; Chris@202: #ifndef NO_OVERWRITE Chris@202: else { Chris@202: a += lb; Chris@202: while(b < bend) Chris@202: *--a = *--bend; Chris@202: a += lb; Chris@202: } Chris@202: #endif Chris@202: while(a < aend) Chris@202: *a++ = ' '; Chris@202: } Chris@202: } Chris@202: #ifdef __cplusplus Chris@202: } Chris@202: #endif