All pastes #609643 Raw Edit

Something

public text v1 · immutable
·published 2007-07-09 00:23 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int validateSum(char *data) {
  int i = 0;
  unsigned char sum = 0, cksum;
  while (data[i] != '*') {
    sum ^= data[i++];
  }
  data[i] = 0;
  sscanf(&data[i + 1], "%2X", &cksum);
  if (sum == cksum) {
    return (1);
  } else {
    return (0);
  }
}

// This function mangles buf
char *NMEATok(char **buf) {
  char  *nextTok;
  
  nextTok = *buf;
  
  if (**buf == ',') {
    nextTok--;
    *nextTok = ' ';
  } else if (!**buf) {
    return (NULL);
  } else {
    while (**buf != ',') {
      if (!**buf) 
        return(nextTok);
      (*buf)++;
    }
  }
  **buf= 0;
  (*buf)++;
  return(nextTok);
}
  
int main () {
  FILE *fp = NULL;
  char c, 
       buffer[100];
  char *data = NULL,
       *tmp = NULL;
  int i;

  if ((fp = fopen("/dev/tts/0","r")) == NULL) {
    printf("Can't open /dev/tts/0");
    return (1);
  }

  while (1) {
    fgets(buffer, 100, fp);
    //if (strncmp(buffer,"$GPGGA", 6) == 0){
      data=buffer + 1;
      if (!validateSum(data)){
        printf("Bad checksum!\n");
        continue;
      }
      data += 6;
      printf("\n ## %s", data);
      i = 0;
      while ((tmp = NMEATok(&data)) != NULL) {
        printf("\n%d: ", i++);
        if (tmp == NULL) break;
        printf("%s", tmp, data);
      }
    //}
  }
  return (0);
}