⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 com_compose.c

📁 ngspice又一个电子CAD仿真软件代码.功能更全
💻 C
📖 第 1 页 / 共 2 页
字号:
                        return;                    }                    val++;                    if (!*val) {                        wl = wl->wl_next;                        if (wl) {                            val = wl->wl_word;                        } else {                            fprintf(cp_err,                            "Error: bad syntax\n");                            return;                        }                    }                    wl = wl->wl_next;                } else {                    fprintf(cp_err, "Error: bad syntax\n");                    return;                }            }            if (cieq(var, "start")) {                startgiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                start = *td;            } else if (cieq(var, "stop")) {                stopgiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                stop = *td;            } else if (cieq(var, "step")) {                stepgiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                step = *td;            } else if (cieq(var, "center")) {                centergiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                center = *td;            } else if (cieq(var, "span")) {                spangiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                span = *td;            } else if (cieq(var, "mean")) {                meangiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                mean = *td;            } else if (cieq(var, "sd")) {                sdgiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                sd = *td;            } else if (cieq(var, "lin")) {                lingiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                lin = *td;            } else if (cieq(var, "log")) {                loggiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                log = *td;            } else if (cieq(var, "dec")) {                decgiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                dec = *td;            } else if (cieq(var, "gauss")) {                gaussgiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                gauss = *td;            } else if (cieq(var, "random")) {                randmgiven = TRUE;                if (!(td = ft_numparse(&val, FALSE))) {                    fprintf(cp_err,                        "Error: bad parm %s = %s\n",                        var, val);                    return;                }                randm = *td;            } else if (cieq(var, "pool")) {                poolgiven = TRUE;                pool = val;            }        }#ifdef LINT/* XXX Now, doesn't this look just a little suspicious */        if (centergiven || spangiven || meangiven || sdgiven ||                poolgiven)            j = k = l = m = q = inds = center + span + mean + sd +                    log + dec + gauss + randm + pool;#endif        /* Now see what we have... start and stop are pretty much         * compatible with everything...         */        if (stepgiven && (step == 0.0)) {            fprintf(cp_err, "Error: step cannot = 0.0\n");            return;        }        if (startgiven && stopgiven && (start > stop)) {            tt = start;            start = stop;            stop = tt;            reverse = TRUE;        }        if (lingiven + loggiven + decgiven + randmgiven + gaussgiven                > 1) {            fprintf(cp_err,    "Error: can have at most one of (lin, log, dec, random, gauss)\n");            return;        } else if (lingiven + loggiven + decgiven + randmgiven +                gaussgiven == 0) {            /* Hmm, if we have a start, stop, and step we're ok. */            if (startgiven && stopgiven && stepgiven) {                lingiven = TRUE;                lin = (stop - start) / step + 1;                stepgiven = FALSE;  /* Problems below... */            } else {                fprintf(cp_err,"Error: either one of (lin, log, dec, random, gauss) must be given, or all\n");                fprintf(cp_err,            "\tof (start, stop, and step) must be given.\n");                return;            }        }        if (lingiven) {            /* Create a linear sweep... */            data = (double *) tmalloc(sizeof (double) * (int) lin);            if (stepgiven && startgiven && stopgiven) {                if (step != (stop - start) / lin * (reverse ?                        -1 : 1)) {                    fprintf(cp_err,                     "Warning: bad step -- should be %g\n",                            (stop - start) / lin *                            (reverse ? -1 : 1));                    stepgiven = FALSE;                }            }             if (!startgiven) {                if (stopgiven && stepgiven) {                    start = stop - step * lin;                } else if (stopgiven) {                    start = stop - lin;                } else {                    start = 0;                }                startgiven = TRUE;            }            if (!stopgiven) {                if (stepgiven)                    stop = start + lin * step;                else                    stop = start + lin;                stopgiven = TRUE;            }             if (!stepgiven) {                step = (stop - start) / lin;            }            if (reverse)                for (i = 0, tt = stop; i < lin;                        i++, tt -= step)                    data[i] = tt;            else                for (i = 0, tt = start; i < lin;                        i++, tt += step)                    data[i] = tt;            length = lin;        } else if (loggiven || decgiven) {            /* Create a log sweep... */        } else if (randmgiven) {            /* Create a set of random values... */        } else if (gaussgiven) {            /* Create a gaussian distribution... */        }    }    result = alloc(struct dvec);    ZERO(result, struct dvec);    result->v_name = copy(resname);    result->v_type = type;    result->v_flags = (realflag ? VF_REAL : VF_COMPLEX) | VF_PERMANENT;    if (realflag)        result->v_realdata = data;    else        result->v_compdata = cdata;    result->v_length = length;    result->v_numdims = 1;    result->v_dims[0] = length;    vec_new(result);    cp_addkword(CT_VECTOR, result->v_name);    free_pnode(first_pn);    tfree(resname);/*DG: resname has been copied so its remains allocated: memory leak One can remove this and not copy resname*/    return;}

⌨️ 快捷键说明

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