/*
*
* AutoHarp.c -- plays chords on key presses using Polyphonic Music functions
*
*****************/

#include <poly.h>
#include <polychrd.h>
#include <stdio.h>

main()
{
char c;   

   puts("AUTOHARP Simulator ver 1.10 - copr. 1989 GrigaSoft Productions");   
   puts("");
   puts(" Chords:  A   A#   B   C   C#   D   D#   E   F   F#   G   G#  ");
   puts("         --- ---- --- --- ---- --- ---- --- --- ---- --- ---- ");
   puts("");
   puts(" MAJOR:  <1>  <2> <3> <4>  <5> <6>  <7> <8> <9>  <0> <->  <=> ");
   puts("");
   puts(" MINOR:  <q>  <w> <e> <r>  <t> <y>  <u> <i> <o>  <p> <[>  <]> ");
   puts("");
   puts(" DIM:    <a>  <s> <d> <f>  <g> <h>  <j> <k> <l>  <;> <'>  <`> ");
   puts("");
   puts(" SEVNTH: <Shift>");
   puts("");
   puts(" Press keys to play chords (CAPS LOCK off). Press <ESC> to quit...");

   do {
      c = getch();
      switch (c)
         {
         case '1' : poly( a_maj );   break;
         case '2' : poly( ash_maj ); break;
         case '3' : poly( b_maj );   break;
         case '4' : poly( c_maj );   break;
         case '5' : poly( csh_maj ); break;
         case '6' : poly( d_maj );   break;
         case '7' : poly( dsh_maj ); break;
         case '8' : poly( e_maj );   break;
         case '9' : poly( f_maj );   break;
         case '0' : poly( fsh_maj ); break;
         case '-' : poly( g_maj );   break;
         case '=' : poly( gsh_maj ); break;
         case 'q' : poly( a_min );   break;
         case 'w' : poly( ash_min ); break;
         case 'e' : poly( b_min );   break;
         case 'r' : poly( c_min );   break;
         case 't' : poly( csh_min ); break;
         case 'y' : poly( d_min );   break;
         case 'u' : poly( dsh_min ); break;
         case 'i' : poly( e_min );   break;
         case 'o' : poly( f_min );   break;
         case 'p' : poly( fsh_min ); break;
         case '[' : poly( g_min );   break;
         case ']' : poly( gsh_min ); break;
         case '!' : poly( a_7 );     break;
         case '@' : poly( ash_7 );   break;
         case '#' : poly( b_7 );     break;
         case '$' : poly( c_7 );     break;
         case '%' : poly( csh_7 );   break;
         case '^' : poly( d_7 );     break;
         case '&' : poly( dsh_7 );   break;
         case '*' : poly( e_7 );     break;
         case '(' : poly( f_7 );     break;
         case ')' : poly( fsh_7 );   break;
         case '_' : poly( g_7 );     break;
         case '+' : poly( gsh_7 );   break;
         case 'Q' : poly( a_m7 );    break;
         case 'W' : poly( ash_m7 );  break;
         case 'E' : poly( b_m7 );    break;
         case 'R' : poly( c_m7 );    break;
         case 'T' : poly( csh_m7 );  break;
         case 'Y' : poly( d_m7 );    break;
         case 'U' : poly( dsh_m7 );  break;
         case 'I' : poly( e_m7 );    break;
         case 'O' : poly( f_m7 );    break;
         case 'P' : poly( fsh_m7 );  break;
         case '{' : poly( g_m7 );    break;
         case '}' : poly( gsh_m7 );  break;
         case 'a' : poly( a_dim );   break;
         case 's' : poly( ash_dim ); break;
         case 'd' : poly( b_dim );   break;
         case 'f' : poly( c_dim );   break;
         case 'g' : poly( csh_dim ); break;
         case 'h' : poly( d_dim );   break;
         case 'j' : poly( dsh_dim ); break;
         case 'k' : poly( e_dim );   break;
         case 'l' : poly( f_dim );   break;
         case ';' : poly( fsh_dim ); break;
         case SQ  : poly( g_dim );   break;
         case '`' : poly( gsh_dim ); break;
         case 'A' : poly( a_dim7 );   break;
         case 'S' : poly( ash_dim7 ); break;
         case 'D' : poly( b_dim7 );   break;
         case 'F' : poly( c_dim7 );   break;
         case 'G' : poly( csh_dim7 ); break;
         case 'H' : poly( d_dim7 );   break;
         case 'J' : poly( dsh_dim7 ); break;
         case 'K' : poly( e_dim7 );   break;
         case 'L' : poly( f_dim7 );   break;
         case ':' : poly( fsh_dim7 ); break;
         case '"' : poly( g_dim7 );   break;
         case '~' : poly( gsh_dim7 ); break;
         }
      }
   while (c != 27);   /* until <ESC> is pressed */
}
                     
