#include <math.h>
#include <string.h>
#include <stdio.h>

#define duration 800
#define pause 400

float col[] = { 1209.0, 1336.0, 1477.0, 1633.0 };
float row[] = { 697.0, 770.0, 852.0, 941.0 };
char positions[] = "123A456B789C*0#D";

/* presume 8000 samples/second, mono, 8 bits/sample */
main(int argc, char *argv[]) {
  int i;
  char *ap, *cp;
  float f1, f2, ri, ci;
  
  if (argc != 2)
    exit(1);
  ap = argv[1];
  while (*ap) {
    cp = strchr(positions, *ap);
    if (cp) {
      ci = col[(cp - positions) % 4];
      ri = row[(cp - positions) / 4];
      for (f1 = 0.0, f2 = 0.0, i=0; i < duration;
	   i++, f1 += 6.28/8000.0*ri, f2 += 6.28/8000.0*ci) {
	putchar((sin(f1)*63.0) + (sin(f2)*63.0) + 128);
      }
      for (i = 0; i < pause; i++)
	putchar(128);
    }
    ap++;
  }
}
