#include #include #include #define MOBJ 12 void getobj_(char *buf, int kv[6], float rv[8]) /****************************************************************************/ /* Return Inf. */ /* kobj(1 : 2 : 3 : 4 : 5 : 6) robj(1 : 2 : 3 : 4 : 5 : 6 : 7 : 8) */ /* kv [0 : 1 : 2 : 3 : 4 : 5] rv [0 : 1 : 2 : 3 : 4 : 5 : 6 : 7] */ /* */ /* POINT 1 nc 0 0 col 0 xp yp - - dp - sz - */ /* CIRCLE 2 nc 0 0 col typ xp yp - - dp r - th */ /* HLINE 3 nc 0 0 col typ x1 y1 x2 y2 dp - - th */ /* SLINE 4 nc 0 0 col typ x1 y1 x2 y2 d1 d2 - th */ /* HRECT 5 nc 0 0 col typ x1 y1 x2 y2 dp - - th */ /* BLOCK 6 nc 0 0 col typ x1 y1 x2 y2 d1 d2 - th */ /* MARK 7 nc mk 0 col 0 xp yp - - - - sz th */ /* LSTYLE 8 -1 lfs lfe txc bgc - - - - - ang sz th */ /* TEXT 9 nc lts lte 0 kp xp yp - - - - - - */ /* HPOLYG 10 nc npt 0 col typ - - - - dp - - th */ /* SPOLYG 11 nc npt 0 col typ - - - - - - - th */ /* LRECT 12 nc 0 0 col typ x1 y1 x2 y2 dp - - th */ /* (else) 0 - - - - - - - - - - - - - */ /****************************************************************************/ { char pat[8]=" "; char sobj[MOBJ][8] = { "POINT ", "CIRCLE ", "HLINE ", "SLINE ", "HRECT ", "BLOCK ", "MARK ", "LSTYLE ", "TEXT ", "HPOLYG ", "SPOLYG ", "LRECT " }; int l, m, nc, i, k, i2, k2, j; float fi, fk, fi2, fk2; char *buf0, *buf1; for (l=0; l<6; l++) kv[l] = 0; for (l=0; l<8; l++) rv[l] = 0.F; buf0 = buf; while ((*buf==' ')||(*buf=='\t')) buf++; if (*buf == '\0') return; for (l=0; ((*buf!=' ')&&(*buf!='\t')); l++) { if (l<7) pat[l] = toupper(*buf); buf++; if (*buf == '\0') return; } while ((*buf==' ') || (*buf=='\t')) buf++; if (*buf == '\0') return; for (m=0; m MOBJ) return; if (m == 8) { kv[0] = 8; kv[1] = -1; kv[2] = buf-buf0; kv[5] = -999; l = 0; sscanf(buf,"%*s%n",&l); buf += l; kv[3] = buf-buf0; j = sscanf(buf, "%f %f %d %d", &rv[6],&rv[5],&kv[4],&kv[5]); if (j < 1) kv[0] = 0; } else if (*buf == '*') { buf++; if (m == 1) { j = sscanf(buf, "%d:%f %d:%f %f %f %d", &i,&fi,&k,&fk,&rv[4],&rv[6],&kv[4]); if (j < 6) return; rv[0] = fi + i*60; rv[1] = fk + k*60; } else if (m == 2) { j = sscanf(buf, "%d:%f %d:%f %f %f %f %d %d", &i,&fi,&k,&fk,&rv[4],&rv[5],&rv[7],&kv[4],&kv[5]); if (j < 6) return; rv[0] = fi + i*60; rv[1] = fk + k*60; } else if (m == 3) { j = sscanf(buf, "%d:%f %d:%f %d:%f %d:%f %f %f %d %d", &i,&fi,&k,&fk,&i2,&fi2,&k2,&fk2,&rv[4],&rv[7], &kv[4],&kv[5]); if (j < 9) return; rv[0] = fi + i*60; rv[2] = fi2 + i2*60; rv[1] = fk + k*60; rv[3] = fk2 + k2*60; } else if (m == 4) { j = sscanf(buf, "%d:%f %d:%f %f %d:%f %d:%f %f %f %d %d", &i,&fi,&k,&fk,&rv[4],&i2,&fi2,&k2,&fk2,&rv[5],&rv[7], &kv[4],&kv[5]); if (j < 10) return; rv[0] = fi + i*60; rv[2] = fi2 + i2*60; rv[1] = fk + k*60; rv[3] = fk2 + k2*60; } else if (m == 5) { j = sscanf(buf, "%d:%f %d:%f %d:%f %d:%f %f %f %d %d", &i,&fi,&k,&fk,&i2,&fi2,&k2,&fk2,&rv[4],&rv[7], &kv[4],&kv[5]); if (j < 9) return; rv[0] = fi + i*60; rv[2] = fi2 + i2*60; rv[1] = fk + k*60; rv[3] = fk2 + k2*60; } else if (m == 6) { j = sscanf(buf, "%d:%f %d:%f %d:%f %d:%f %f %f %f %d %d", &i,&fi,&k,&fk,&i2,&fi2,&k2,&fk2,&rv[4],&rv[5],&rv[7], &kv[4],&kv[5]); if (j < 10) return; rv[0] = fi + i*60; rv[2] = fi2 + i2*60; rv[1] = fk + k*60; rv[3] = fk2 + k2*60; } else if (m == 7) { j = sscanf(buf, "%d:%f %d:%f %d %f %f %d", &i,&fi,&k,&fk,&kv[2],&rv[6],&rv[7],&kv[4]); if (j < 6) return; rv[0] = fi + i*60; rv[1] = fk + k*60; } else if (m == 9) { l = 0; j = sscanf(buf, "%d:%f %d:%f%n %d%n", &i,&fi,&k,&fk,&l,&kv[5],&l); if (j < 4) return; buf += l; rv[0] = fi + i*60; rv[1] = fk + k*60; while ((*buf==' ')||(*buf=='\t')) buf++; kv[2] = buf-buf0; while (*buf != '\0') { if ((*buf!=' ')&&(*buf!='\t')) buf1 = buf+1; buf++; } kv[3] = buf1-buf0; } else if (m == 10) { j = sscanf(buf, "%d %f %f %d %d", &kv[2],&rv[4],&rv[7],&kv[4],&kv[5]); if (j < 2) return; } else if (m == 11) { j = sscanf(buf, "%d %f %d %d", &kv[2],&rv[7],&kv[4],&kv[5]); if (j < 1) return; } else if (m == 12) { j = sscanf(buf, "%d:%f %d:%f %d:%f %d:%f %f %f %d %d", &i,&fi,&k,&fk,&i2,&fi2,&k2,&fk2,&rv[4],&rv[7], &kv[4],&kv[5]); if (j < 9) return; rv[0] = fi + i*60; rv[2] = fi2 + i2*60; rv[1] = fk + k*60; rv[3] = fk2 + k2*60; } kv[0] = m; kv[1] = -1; } else { l = 0; if (sscanf(buf,"%d%n",&nc,&l) < 1) return; buf += l; if (m == 1) { j = sscanf(buf, "%f %f %f %f %d", &rv[0],&rv[1],&rv[4],&rv[6],&kv[4]); if (j < 4) return; } else if (m == 2) { j = sscanf(buf, "%f %f %f %f %f %d %d", &rv[0],&rv[1],&rv[4],&rv[5],&rv[7],&kv[4],&kv[5]); if (j < 4) return; } else if (m == 3) { j = sscanf(buf, "%f %f %f %f %f %f %d %d", &rv[0],&rv[1],&rv[2],&rv[3],&rv[4],&rv[7],&kv[4],&kv[5]); if (j < 5) return; } else if (m == 4) { j = sscanf(buf, "%f %f %f %f %f %f %f %d %d", &rv[0],&rv[1],&rv[4],&rv[2],&rv[3],&rv[5],&rv[7], &kv[4],&kv[5]); if (j < 6) return; } else if (m == 5) { j = sscanf(buf, "%f %f %f %f %f %f %d %d", &rv[0],&rv[1],&rv[2],&rv[3],&rv[4],&rv[7],&kv[4],&kv[5]); if (j < 5) return; } else if (m == 6) { j = sscanf(buf, "%f %f %f %f %f %f %f %d %d", &rv[0],&rv[1],&rv[2],&rv[3],&rv[4],&rv[5],&rv[7], &kv[4],&kv[5]); if (j < 6) return; } else if (m == 7) { j = sscanf(buf, "%f %f %d %f %f %d", &rv[0],&rv[1],&kv[2],&rv[6],&rv[7],&kv[4]); if (j < 4) return; } else if (m == 9) { l = 0; j = sscanf(buf, "%f %f%n %d%n", &rv[0],&rv[1],&l,&kv[5],&l); if (j < 2) return; buf += l; while ((*buf==' ')||(*buf=='\t')) buf++; kv[2] = buf-buf0; while (*buf != '\0') { if ((*buf!=' ')&&(*buf!='\t')) buf1 = buf+1; buf++; } kv[3] = buf1-buf0; } else if (m == 10) { j = sscanf(buf, "%d %f %f %d %d", &kv[2],&rv[4],&rv[7],&kv[4],&kv[5]); if (j < 2) return; } else if (m == 11) { j = sscanf(buf, "%d %f %d %d", &kv[2],&rv[7],&kv[4],&kv[5]); if (j < 1) return; } else if (m == 12) { j = sscanf(buf, "%f %f %f %f %f %f %d %d", &rv[0],&rv[1],&rv[2],&rv[3],&rv[4],&rv[7],&kv[4],&kv[5]); if (j < 5) return; } kv[0] = m; kv[1] = nc; } } void scandm_(int *l, char *buf, float *fv) { int i, n; float f; buf += *l - 1; while ((*buf==' ')||(*buf=='\t')) { buf++; (*l)++; } if (*buf == '\0') *l = 0; else if (sscanf(buf,"%d:%f%n",&i,&f,&n) < 2) *l = -1; else { *l += n; *fv = f + i*60; } } void scanfv_(int *l, char *buf, float *fv) { int n; buf += *l - 1; while ((*buf==' ')||(*buf=='\t')) { buf++; (*l)++; } if (*buf == '\0') *l = 0; else if (sscanf(buf,"%f%n",fv,&n) < 1) *l = -1; else *l += n; } void scaniv_(int *l, char *buf, int *iv) { int n; buf += *l - 1; while ((*buf==' ')||(*buf=='\t')) { buf++; (*l)++; } if (*buf == '\0') *l = 0; else if (sscanf(buf,"%d%n",iv,&n) < 1) *l = -1; else *l += n; }