summaryrefslogtreecommitdiff
path: root/cgats/cgats.c
diff options
context:
space:
mode:
Diffstat (limited to 'cgats/cgats.c')
-rwxr-xr-x[-rw-r--r--]cgats/cgats.c66
1 files changed, 39 insertions, 27 deletions
diff --git a/cgats/cgats.c b/cgats/cgats.c
index a39ec04..3e6e642 100644..100755
--- a/cgats/cgats.c
+++ b/cgats/cgats.c
@@ -68,7 +68,8 @@ extern void error(const char *fmt, ...), warning(const char *fmt, ...);
#include "pars.h"
#include "cgats.h"
-#define REAL_SIGDIG 6 /* Number of significant digits in real representation */
+#undef EMIT_KEYWORDS /* [und] Emit unknown keywords by default */
+#define REAL_SIGDIG 6 /* [6] Number of significant digits in real representation */
static int cgats_read(cgats *p, cgatsFile *fp);
static int find_kword(cgats *p, int table, const char *ksym);
@@ -147,6 +148,10 @@ cgatsAlloc *al /* memory allocator */
p->write_name = NULL;
#endif
+#ifdef EMIT_KEYWORDS
+ p->emit_keywords = 1;
+#endif
+
return p;
}
@@ -668,6 +673,7 @@ cgats_read(cgats *p, cgatsFile *fp) {
for (j = 0; j < ct->nsets; j++) {
data_type ty;
ty = guess_type(((char *)ct->rfdata[j][i]));
+
if (ty == cs_t) {
bt = cs_t;
break; /* Early out */
@@ -678,7 +684,7 @@ cgats_read(cgats *p, cgatsFile *fp) {
if (bt == i_t)
bt = ty;
} else { /* ty == i_t */
- bt = ty;
+ /* This is the default */
}
}
/* Got guessed type bt. Sanity check against known field types */
@@ -1446,7 +1452,7 @@ cgats_write(cgats *p, cgatsFile *fp) {
/* Keyword and data if it is present */
if (t->ksym[i] != NULL && t->kdata[i] != NULL) {
- if (!standard_kword(t->ksym[i])) { /* Do the right thing */
+ if (p->emit_keywords && !standard_kword(t->ksym[i])) { /* Do the right thing */
if ((qs = quote_cs(al, t->ksym[i])) == NULL) {
al->free(al, sfield);
return err(p,-2,"quote_cs() malloc failed!");
@@ -1485,7 +1491,7 @@ cgats_write(cgats *p, cgatsFile *fp) {
/* Declare any non-standard fields */
for (field = 0; field < t->nfields; field++) {
- if (!sfield[field]) /* Non-standard */ {
+ if (p->emit_keywords && !sfield[field]) /* Non-standard */ {
char *qs;
if ((qs = quote_cs(al, t->fsym[field])) == NULL) {
al->free(al, sfield);
@@ -1931,21 +1937,22 @@ real_format(double value, int nsd, char *fmt) {
xtot++;
}
if (value < 1.0) {
+ int thr = -5;
ndigs = (int)(log10(value));
- if (ndigs <= -2) {
+ if (ndigs <= thr) {
sprintf(fmt,"%%%d.%de",xtot,tot-2);
return;
}
sprintf(fmt,"%%%d.%df",xtot-ndigs,nsd-ndigs);
return;
} else {
+ int thr = -0;
ndigs = (int)(log10(value));
- if (ndigs >= (nsd -1))
- {
+ if (ndigs >= (nsd + thr)) {
sprintf(fmt,"%%%d.%de",xtot,tot-2);
return;
- }
- sprintf(fmt,"%%%d.%df",xtot,(nsd-1)-ndigs);
+ }
+ sprintf(fmt,"%%%d.%df",xtot,(nsd + thr)-ndigs);
return;
}
}
@@ -2090,24 +2097,29 @@ main(int argc, char *argv[]) {
|| pp->add_field(pp, 0, "XYZ_X", r_t) < 0)
error("Initial error: '%s'",pp->err);
- if (pp->add_set(pp, 0, "1", "A1", 0.000012345678) < 0
- || pp->add_set(pp, 0, "2", "A2", 0.00012345678) < 0
- || pp->add_set(pp, 0, "3 ", "A#5",0.0012345678) < 0
- || pp->add_set(pp, 0, "4", "A5", 0.012345678) < 0
- || pp->add_set(pp, 0, "5", "A5", 0.12345678) < 0
- || pp->add_set(pp, 0, "5", "A5", 0.00000000) < 0
- || pp->add_set(pp, 0, "6", "A5", 1.2345678) < 0
- || pp->add_set(pp, 0, "7", "A5", 12.345678) < 0
- || pp->add_set(pp, 0, "8", "A5", 123.45678) < 0
- || pp->add_set(pp, 0, "9", "A5", 1234.5678) < 0
- || pp->add_set(pp, 0, "10", "A5", 12345.678) < 0
- || pp->add_set(pp, 0, "12", "A5", 123456.78) < 0
- || pp->add_set(pp, 0, "13", "A5", 1234567.8) < 0
- || pp->add_set(pp, 0, "14", "A5", 12345678.0) < 0
- || pp->add_set(pp, 0, "15", "A5", 123456780.0) < 0
- || pp->add_set(pp, 0, "16", "A5", 1234567800.0) < 0
- || pp->add_set(pp, 0, "17", "A5", 12345678000.0) < 0
- || pp->add_set(pp, 0, "18", "A5", 123456780000.0) < 0)
+ if (pp->add_set(pp, 0, "1", "A1", 0.000000012345678) < 0
+ || pp->add_set(pp, 0, "2", "A1", 0.00000012345678) < 0
+ || pp->add_set(pp, 0, "3", "A1", 0.0000012345678) < 0
+ || pp->add_set(pp, 0, "4", "A1", 0.000012345678) < 0
+ || pp->add_set(pp, 0, "5", "A1", 0.000012345678) < 0
+ || pp->add_set(pp, 0, "6", "A2", 0.00012345678) < 0
+ || pp->add_set(pp, 0, "7", "A5",0.0012345678) < 0
+ || pp->add_set(pp, 0, "8", "A5", 0.012345678) < 0
+ || pp->add_set(pp, 0, "9", "A5", 0.12345678) < 0
+ || pp->add_set(pp, 0, "10", "A5", 0.00000000) < 0
+ || pp->add_set(pp, 0, "11", "A5", 1.2345678) < 0
+ || pp->add_set(pp, 0, "12", "A5", 12.345678) < 0
+ || pp->add_set(pp, 0, "13", "A5", 123.45678) < 0
+ || pp->add_set(pp, 0, "14", "A5", 1234.5678) < 0
+ || pp->add_set(pp, 0, "15", "A5", 12345.678) < 0
+ || pp->add_set(pp, 0, "16", "A5", 123456.78) < 0
+ || pp->add_set(pp, 0, "17", "A5", 1234567.8) < 0
+ || pp->add_set(pp, 0, "18", "A5", 12345678.0) < 0
+ || pp->add_set(pp, 0, "19", "A5", 123456780.0) < 0
+ || pp->add_set(pp, 0, "20", "A5", 1234567800.0) < 0
+ || pp->add_set(pp, 0, "21", "A5", 12345678000.0) < 0
+ || pp->add_set(pp, 0, "22", "A5", 123456780000.0) < 0
+ || pp->add_set(pp, 0, "23", "A5", 1234567800000.0) < 0)
error("Adding set error '%s'",pp->err);
if (pp->add_table(pp, cgats_5, 0) < 0 /* Start the second table */