?? debug.c
字號:
#include <stdio.h>
#include <math.h>
#include "private.h"
#include "complex.h"
#include "debug.h"
#define MAXTICKS 300
struct db_tick { char ch; int ptr; };
static void findrange(float*, int, float&, float&);
debugger::debugger(int nr, int nc)
{ if (nr > 4) nr = 4;
nrows = nr; ncols = nc;
for (int i = 0; i < nrows; i++) vec[i] = new float[ncols];
ticks = new db_tick[MAXTICKS];
reset();
}
void debugger::insert(float f1, float f2, float f3, float f4)
{ if (ptr < ncols)
{ if (nrows >= 1) vec[0][ptr] = f1;
if (nrows >= 2) vec[1][ptr] = f2;
if (nrows >= 3) vec[2][ptr] = f3;
if (nrows >= 4) vec[3][ptr] = f4;
ptr++;
}
}
void debugger::tick(char ch)
{ if (nticks < MAXTICKS)
{ ticks[nticks].ch = ch;
ticks[nticks].ptr = ptr;
nticks++;
}
}
debugger::~debugger()
{ for (int i = 0; i < nrows; i++) delete vec[i];
delete ticks;
}
void debugger::print(char *fn)
{ FILE *fi = fopen(fn, "w");
if (fi != NULL)
{ for (int pn = 0; pn < nrows; pn++)
{ float ym, dy;
findrange(vec[pn], ptr, ym, dy);
int n = 0, nxt = 0;
while (n < ptr)
{ int n1 = n + 500;
if (n1 > ptr) n1 = ptr;
fprintf(fi, ".sp 0.5i\n");
fprintf(fi, "pn=%d; %d ... %d\n", pn, n, n1-1);
fprintf(fi, ".G1 8i\n");
fprintf(fi, "ticks bot out 0.1 from %d to %d by 100 \"%%g\"\n", n, n+500);
fprintf(fi, "ticks bot out 0.05 from %d to %d by 10 \"\"\n", n, n+500);
fprintf(fi, "ticks left from %g to %g by %g\n", -ym, +ym, dy);
if (nxt < nticks && ticks[nxt].ptr >= n && ticks[nxt].ptr <= n1)
{ int tn = 0;
fprintf(fi, "ticks bot in 0.1 at ");
while (nxt < nticks && ticks[nxt].ptr <= n1)
{ if (tn++ > 0) fprintf(fi, ", ");
fprintf(fi, "%d \"%c\"", ticks[nxt].ptr, ticks[nxt].ch);
nxt++;
}
putc('\n', fi);
if (ticks[nxt-1].ptr == n1) nxt--; /* include last tick again on next page */
}
fprintf(fi, "new solid\n");
for (int i = n; i < n1; i++) fprintf(fi, "%d %g\n", i, vec[pn][i]);
fprintf(fi, ".G2\n.bp\n");
n = n1;
}
}
fclose(fi);
}
else fprintf(stderr, "can't create %s\n", fn);
}
static void findrange(float *vec, int num, float &ym, float &dy)
{ float ymax = -1.0;
for (int i=0; i < num; i++)
{ float y = fabsf(vec[i]);
if (y > ymax) ymax = y;
}
if (ymax > 0.0)
{ int m = (int) (100.0 + log10f(ymax)) - 100; /* round downwards */
float ym1 = powf(10.0, m); int nt = 10;
ym = ym1;
while (ymax > ym)
{ ym = 2.0*ym1;
if (ymax > ym) { ym = 3.0*ym1; nt = 6; }
if (ymax > ym) { ym = 5.0*ym1; nt = 10; }
if (ymax > ym) { ym1 *= 10.0; ym = ym1; }
}
dy = ym/nt;
}
else ym = 0.0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -