#!/bin/sh

if test $CPU = next 
then
  lang=gawk
else
  lang=nawk
fi 

$lang '
BEGIN {

  printf("(progn ")

  # Print out the clock face
  printf("(geometry face { LIST ");
  printf("{ INST unit { OFF 8 6 0 \n")
  printf("-.05 .9 -.3\n")
  printf(".05 .9 -.3\n")
  printf(".05 1.1 -.3\n")
  printf("-.05 1.1 -.3\n")
  printf("-.05 .9 -.1\n")
  printf(".05 .9 -.1\n")
  printf(".05 1.1 -.1\n")
  printf("-.05 1.1 -.1\n")
  printf("4 0 1 2 3\n")
  printf("4 4 5 6 7\n")
  printf("4 0 4 7 3\n")
  printf("4 0 1 5 4\n")
  printf("4 1 5 6 2\n")
  printf("4 2 6 7 3\n")
  printf("}\ntlist\n")
  for (i = 1; i < 12; ++i) {
    ang = i * 3.14159 / 6.0;
    printf("%g %g 0 0\n", cos(ang), -sin(ang));
    printf("%g %g 0 0\n", sin(ang), cos(ang));
    printf("0 0 1 0\n");
    printf("0 0 0 1\n\n");
  }
  printf("}\n");
  printf("{appearance {material {diffuse 0 .75 .75}}");
  printf("INST\n");
  printf("unit OFF\n");
  printf("20 12 30\n");
  printf("	1.214124 0.000000 1.589309\n");
  printf("	0.375185 1.154701 1.589309\n");
  printf("	-0.982247 0.713644 1.589309\n");
  printf("	-0.982247 -0.713644 1.589309\n");
  printf("	0.375185 -1.154701 1.589309\n");
  printf("	1.964494 0.000000 0.375185\n");
  printf("	0.607062 1.868345 0.375185\n");
  printf("	-1.589309 1.154701 0.375185\n");
  printf("	-1.589309 -1.154701 0.375185\n");
  printf("	0.607062 -1.868345 0.375185\n");
  printf("	1.589309 1.154701 -0.375185\n");
  printf("	-0.607062 1.868345 -0.375185\n");
  printf("	-1.964494 0.000000 -0.375185\n");
  printf("	-0.607062 -1.868345 -0.375185\n");
  printf("	1.589309 -1.154701 -0.375185\n");
  printf("	0.982247 0.713644 -1.589309\n");
  printf("	-0.375185 1.154701 -1.589309\n");
  printf("	-1.214124 0.000000 -1.589309\n");
  printf("	-0.375185 -1.154701 -1.589309\n");
  printf("	0.982247 -0.713644 -1.589309\n");
  printf("	5 0 1 2 3 4\n");
  printf("	5 0 5 10 6 1\n");
  printf("	5 1 6 11 7 2\n");
  printf("	5 2 7 12 8 3\n");
  printf("	5 3 8 13 9 4\n");
  printf("	5 4 9 14 5 0\n");
  printf("	5 15 10 5 14 19\n");
  printf("	5 16 11 6 10 15\n");
  printf("	5 17 12 7 11 16\n");
  printf("	5 18 13 8 12 17\n");
  printf("	5 19 14 9 13 18\n");
  printf("	5 19 18 17 16 15\n");
  printf("transform\n");
  printf("0.07  0  0    0\n");
  printf("0   0.07  0   0\n");
  printf("0  0   0.07   0\n");
  printf("0 1 -.2 1\n");
  printf("}\n");

  printf("  })\n");


  # Hour hand
  printf("(geometry hour { INST unit {")
  unitcube()
  printf("}\n")
  printf("tlist\n")
  printf(".12 0 0 0\n")
  printf("0 .28 0 0\n")
  printf("0 0 .05 0\n")
  printf("0 .22 0 1\n");
  printf("})")

  # Minute hand
  printf("(geometry minute { INST unit {")
  unitcube();
  printf("}\n")
  printf("tlist\n")
  printf(".07 0 0 0\n")
  printf("0 .55 0 0\n")
  printf("0 0 .05 0\n")
  printf("0 .45 .1 1\n")
  printf("})\n");

  # Second hand
  printf("(geometry second { INST unit {")
  unitcube();
  printf("}\n")
  printf("tlist\n")
  printf(".02 0 0 0\n")
  printf("0 .6 0 0\n")
  printf("0 0 .05 0\n")
  printf("0 .45 .2 1\n")
  printf("})\n");

  printf("(normalization face none)")
  printf("(normalization hour none)")
  printf("(normalization minute none)")
  printf("(normalization second none)")

  printf("(bbox-draw face no)")
  printf("(bbox-draw hour no)")
  printf("(bbox-draw minute no)")
  printf("(bbox-draw second no)")

  printf("(merge-ap face {appearance +edge material { diffuse 0 0 .7}})")
  printf("(merge-ap hour {appearance +edge material { diffuse .54 .15 1}})")
  printf("(merge-ap minute {appearance +edge material { diffuse .13 .82 .51}})")
  printf("(merge-ap second {appearance +edge material { diffuse .82 0 0 }})")

  time = substr(ARGV[4], 7, 2) + 0.0;
  printf("(transform-set second second second rotate 0 0 %g)",
    (time / 60.0) * 3.14159 * 2.0)

  time = time + (substr(ARGV[4], 4, 2) + 0.0)*60.0
  printf("(transform-set minute minute minute rotate 0 0 %g)",
    (time / 3600.0) * 3.14159 * 2.0)

  time += (substr(ARGV[4], 1, 2)%12) * 3600.0
  printf("(transform-set hour hour hour rotate 0 0 %g)",
    (time / 43200.0) * 3.14159 * 2.0)

  printf("(transform-incr hour hour hour rotate 0 0 3.14159 21600)")
  printf("(transform-incr minute minute minute rotate 0 0 3.14159 1800)")
  printf("(transform-incr second second second rotate 0 0 3.14159 30)")

  printf(")")
}

function unitcube() {
  printf("OFF\n8 6 0\n")
  printf("-1 -1 -1\n")
  printf("1 -1 -1\n")
  printf("1 1 -1\n")
  printf("-1 1 -1\n") 
  printf("-1 -1 1\n")
  printf("1 -1 1\n")
  printf("1 1 1\n")
  printf("-1 1 1\n")
  printf("4 0 1 2 3\n")
  printf("4 4 5 6 7\n")
  printf("4 0 4 7 3\n")
  printf("4 0 1 5 4\n")
  printf("4 1 5 6 2\n")
  printf("4 2 6 7 3\n")
}
' `date`