s_cat.c

来自「InsightToolkit-1.4.0(有大量的优化算法程序)」· C语言 代码 · 共 76 行

C
76
字号
/* Unless compiled with -DNO_OVERWRITE, this variant of s_cat allows the
 * target of a concatenation to appear on its right-hand side (contrary
 * to the Fortran 77 Standard, but in accordance with Fortran 90).
 */

#include "f2c.h"
#include "netlib.h"
#ifndef NO_OVERWRITE
#include "stdio.h"
#undef abs
#ifdef KR_headers
 extern char *F77_aloc();
 extern void free();
 extern void exit_();
#else
#undef min
#undef max
#include "stdlib.h"
#endif
#include "string.h"
#endif /* NO_OVERWRITE */

 VOID
#ifdef KR_headers
s_cat(lp, rpp, rnp, np, ll) char *lp; const char *rpp[]; ftnlen rnp[], *np, ll;
#else
s_cat(char *lp, const char *rpp[], ftnlen rnp[], ftnlen *np, ftnlen ll)
#endif
{
        ftnlen i, nc;
        const char *rp;
        ftnlen n = *np;
#ifndef NO_OVERWRITE
        ftnlen L, m;
        char *lp0, *lp1;

        lp0 = 0;
        lp1 = lp;
        L = ll;
        i = 0;
        while(i < n) {
                rp = rpp[i];
                m = rnp[i++];
                if (rp >= lp1 || rp + m <= lp) {
                        if ((L -= m) <= 0) {
                                n = i;
                                break;
                                }
                        lp1 += m;
                        continue;
                        }
                lp0 = lp;
                lp = lp1 = F77_aloc(L = ll, "s_cat");
                break;
                }
        lp1 = lp;
#endif /* NO_OVERWRITE */
        for(i = 0 ; i < n ; ++i) {
                nc = ll;
                if(rnp[i] < nc)
                        nc = rnp[i];
                ll -= nc;
                rp = rpp[i];
                while(--nc >= 0)
                        *lp++ = *rp++;
                }
        while(--ll >= 0)
                *lp++ = ' ';
#ifndef NO_OVERWRITE
        if (lp0) {
                memcpy(lp0, lp1, L);
                free(lp1);
                }
#endif
        }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?