📄 com_compose.c
字号:
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 + -