[Kst] kdeextragear-2/kst/kst/datasources/dirfile
Barth Netterfield
netterfield at astro.utoronto.ca
Tue Oct 26 18:21:24 CEST 2004
CVS commit by netterfield:
FEATURE: 92112
Feature added as requested. The 'number of bits' field is optional.
M +22 -5 getdata.c 1.17
M +1 -0 getdata_struct.h 1.3
--- kdeextragear-2/kst/kst/datasources/dirfile/getdata.c #1.16:1.17
@@ -190,11 +190,24 @@ static void ParseMplex(char in_cols[15][
/***************************************************************************/
static void ParseBit(char in_cols[15][MAX_LINE_LENGTH],
+ int n_cols,
struct BitEntryType *B,
int *error_code) {
+ int error = 0;
+
strcpy(B->field, in_cols[0]); /* field */
strncpy(B->raw_field, in_cols[2], FIELD_LENGTH); /* field */
B->bitnum=atoi(in_cols[3]);
- if ((B->bitnum<0) || B->bitnum>31) {
+ if (n_cols>4) {
+ B->numbits=atoi(in_cols[4]);
+ } else {
+ B->numbits=1;
+ }
+
+ if (B->numbits<1) error = 1;
+ if (B->bitnum<0) error = 1;
+ if (B->bitnum + B->numbits - 1 > 31) error = 1;
+
+ if (error) {
*error_code=GD_E_FORMAT;
return;
@@ -329,5 +342,5 @@ struct FormatType *GetFormat(const char
realloc(F->bitEntries,
F->n_bit*sizeof(struct BitEntryType));
- ParseBit(in_cols, F->bitEntries+F->n_bit - 1,
+ ParseBit(in_cols, n_cols, F->bitEntries+F->n_bit - 1,
error_code);
} else {
@@ -1028,4 +1041,5 @@ static int DoIfBit(struct FormatType *F,
int spf;
int ns;
+ int mask;
/******* binary search for the field *******/
@@ -1059,6 +1073,9 @@ static int DoIfBit(struct FormatType *F,
}
+ if (B->numbits==32) mask = 0xffffffff;
+ else mask = (int)(pow(2,B->numbits)-0.9999);
+
for (i=0; i<*n_read; i++) {
- tmpbuf[i] = (tmpbuf[i]>>B->bitnum) & 0x0001;
+ tmpbuf[i] = (tmpbuf[i]>>B->bitnum) & mask;
}
--- kdeextragear-2/kst/kst/datasources/dirfile/getdata_struct.h #1.2:1.3
@@ -58,4 +58,5 @@ struct BitEntryType {
char raw_field[FIELD_LENGTH+1];
int bitnum;
+ int numbits;
};
More information about the Kst
mailing list