1 /* Unless compiled with -DNO_OVERWRITE, this variant of s_copy allows the
2  * target of an assignment to appear on its right-hand side (contrary
3  * to the Fortran 77 Standard, but in accordance with Fortran 90),
4  * as in  a(2:5) = a(4:7) .
5  */
6 
7 #include "v3p_f2c.h"
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 /* assign strings:  a = b */
13 
14 #ifdef KR_headers
s_copy(a,b,la,lb)15 int s_copy(a, b, la, lb) char *a, *b; ftnlen la, lb;
16 #else
17 int s_copy(char *a, char *b, ftnlen la, ftnlen lb)
18 #endif
19 {
20         register char *aend, *bend;
21 
22         aend = a + la;
23 
24         if(la <= lb)
25 #ifndef NO_OVERWRITE
26                 if (a <= b || a >= b + la)
27 #endif
28                         while(a < aend)
29                                 *a++ = *b++;
30 #ifndef NO_OVERWRITE
31                 else
32                         for(b += la; a < aend; )
33                                 *--aend = *--b;
34 #endif
35 
36         else {
37                 bend = b + lb;
38 #ifndef NO_OVERWRITE
39                 if (a <= b || a >= bend)
40 #endif
41                         while(b < bend)
42                                 *a++ = *b++;
43 #ifndef NO_OVERWRITE
44                 else {
45                         a += lb;
46                         while(b < bend)
47                                 *--a = *--bend;
48                         a += lb;
49                         }
50 #endif
51                 while(a < aend)
52                         *a++ = ' ';
53                 }
54         return 0;
55         }
56 #ifdef __cplusplus
57 }
58 #endif
59