Source file: /~heha/basteln/Haus/Telefon/CLIP-Anzeige/clip.zip/tables.awk

BEGIN{
 if (!F_ADC) F_ADC=8900;
 if (!WINDOWS) WINDOWS=1;
 l=int(F_ADC/50+0.5);	# Länge des Fensters in Bytes (20 ms Länge)
 SINTAB=int((INITEND+l+255)/256)*256;
 PI=3.1415926;
# 0. Platz
# Dieser Punkt ist am kritischsten, um die Sinustabelle auf eine
# glatte /256 teilbare Adresse zu legen.
 print "// Diese Datei wird von „tables.awk“ erstellt. Editieren zwecklos!";
 print "#include <avr/io.h>	// _VECTORS_SIZE";
 print ".section .vectors	// gleich hinter Interrupttabelle platzieren";
 printf (".set L,%d\n",l);
 print ".set S,(_VECTORS_SIZE+L+255)>>8";
 print ".space S<<8-L-_VECTORS_SIZE";
# 1. Fenstertabelle
 print ".type wintab,@common";
 printf ("wintab: 	// Länge = %d Bytes, prüfe Adresse = 0x%04X\n",l,SINTAB-l);
 for (i=0;i<l;i++) {
  arg=(i+0.5)/l;
  if (WINDOWS==1) arg=((arg-0.5)*0.9)+0.5;	#spreizen um sinnlose Nullen zu vermeiden
  c=sin(arg*PI);
  c=int(c*c*255+0.5);
  if (i%8==0) printf("\t.byte\t");
  printf("%3d",c);
  if (i%8==7 || i==l-1) printf("\n");
  else printf(",");
 }
# 2. Sinustabelle
 print ".type sintab,@common";
 printf("sintab:		// Sinustabelle 256 Stützstellen, Adresse = 0x%04X\n",SINTAB);
 for (i=0;i<128;i++) {
  if (i%8==0) printf("\t.byte\t");
  printf("%3d",int(122*sin(i*2*PI/256)+0.5));
  if (i%8==7) printf("\n");
  else printf(",");
 }
 print "#ifdef __AVR_HAVE_MUL__	// Zweierkomplement";
 for (i=0;i<128;i++) {
  if (i%8==0) printf("\t.byte\t");
  v=int(122*sin(i*2*PI/256)+0.5);
  printf("%3d",v?256-v:v);
  if (i%8==7) printf("\n");
  else printf(",");
 }
 print "#else			// Vorzeichen+Betrag";
 for (i=0;i<128;i++) {
  if (i%8==0) printf("\t.byte\t");
  printf("%3d",128+int(122*sin(i*2*PI/256)+0.5));
  if (i%8==7) printf("\n");
  else printf(",");
 }
 print "#endif";
}
Detected encoding: UTF-80