[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