📄 compose.c
字号:
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 %lg\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); return;}/* Copy the data from a vector into a buffer with larger dimensions. */static voiddimxpand(v, newdims, data) struct dvec *v; int *newdims; double *data;{ complex *cdata = (complex *) data; bool realflag = isreal(v); int i, j, o, n, t, u; int ncount[MAXDIMS], ocount[MAXDIMS]; for (i = 0; i < MAXDIMS; i++) ncount[i] = ocount[i] = 0; for (;;) { for (o = n = i = 0; i < v->v_numdims; i++) { for (j = i, t = u = 1; j < v->v_numdims; j++) { t *= v->v_dims[j]; u *= newdims[j]; } o += ocount[i] * t; n += ncount[i] * u; } if (realflag) { data[n] = v->v_realdata[o]; } else { realpart(&cdata[n]) = realpart(&v->v_compdata[o]); imagpart(&cdata[n]) = imagpart(&v->v_compdata[o]); } /* Now find the next index element... */ for (i = v->v_numdims - 1; i >= 0; i--) { if ((ocount[i] < v->v_dims[i] - 1) && (ncount[i] < newdims[i] - 1)) { ocount[i]++; ncount[i]++; break; } else ocount[i] = ncount[i] = 0; } if (i < 0) break; } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -