#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
#include <string.h>

#include <unistd.h>

#include <stdarg.h>
#include <limits.h>

#define MCLK 3
#define DX 0
#define FS 1

#define ISDN_FRAMECUT_1 7
#define ISDN_FRAMECUT_2 10
#define ISDN_FRAMECUT_3 17

int main(int argc, char **argv) {

  int i,j = 0;

  int gcnt = 0;
  int framecnt = 0;

  int prevclk = 0;
  int prevfs = 0;

  int sample = 0;
  int sptr = 0;

  int fss = 0;
  int sps = 0;

  char c;

  while( (j=(read(0, &c, 1))) > 0 ) {

    char fs = (c >> FS) & 1;
    if(fs == 1 && prevfs == 0) {
      framecnt = 0;
      fss++;
      //fprintf(stderr, "framestart\n");
    }

    char clk = (c >> MCLK) & 1;
    if(clk == 0 && prevclk == 1) {
      //fprintf(stderr, "clke, %i\n", framecnt);
      char dx = (c >> DX) & 1;
      if( framecnt <= 7) {
        //fprintf(stderr, "clke - act\n");
        sample = (sample << 1) | dx;
        sptr++;
        if(sptr == 8) {
          putchar(sample);
          sample = 0;
          sptr = 0;
          sps++;
        }
      }
      gcnt++;
      framecnt++;
    }

    prevfs = fs;
    prevclk = clk;
  }

  fprintf(stderr, "fss = %i, sps = %i\n", fss, sps);
}

