Goto: [ Program Documentation ]

//
// Programmer:    Craig Stuart Sapp <craig@ccrma.stanford.edu>
// Creation Date: Sat Sep 23 12:28:00 PDT 2000
// Last Modified: Sat Sep 23 12:28:03 PDT 2000
// Filename:      ...sig/doc/examples/all/hciBasic/chanscope.cpp
// Syntax:        C++; hciImprov 2.3
//  
// Description: Display all MIDI messages that come into the computer.
//              via chanscope selection from the comptuter keyboard.    
//

#include "hciImprov.h"      

#define DEC_DISPLAY 0
#define HEX_DISPLAY 1

int channelDisplay = 17;
int oldDisplay = -1;
int commandDisplay = DEC_DISPLAY;

/*--------------------- maintenance algorithms --------------------------*/

void description(void) {
   cout << 
   "chanscope -- Displays MIDI message that come into the computer\n"
   "==============================================================\n"
   "  1-9: display channels 1  though 9                    \n"
   "  q-i: display channels 10 though 16                   \n"
   "    o: display system messages                         \n"
   "space: toggle display of messages                      \n"
   "    d: display MIDI commands in decimal format         \n"
   "    h: display MIDI commands in hexadecimal format     \n"
   << endl;
} 

void initialization(void) { 
   description();
}

void finishup(void) { }


/*-------------------- main loop algorithms -----------------------------*/

void mainloopalgorithms(void) { }

/*-------------------- triggered algorithms -----------------------------*/


void mididata(int intime, int command, int p1, int p2) { 
   int channel = command & 0x0f;
   if (command & 0xf0 == 0xf0) {   // system messages
      channel = 16;
   }
   if (channel == channelDisplay || channelDisplay < 0) {
      cout << "Time    = " << intime  << "\t";
      if (commandDisplay == DEC_DISPLAY) {
         cout << "Command = " << dec << command << "\t";
      } else {
         cout << "Command = 0x" << hex << command << dec << "\t";
      }
      cout << "P1 = " << p1 << "\t"
           << "P2 = " << p2 
           << endl;
   }
}


void keyboardchar(int key) { 
   switch (key) {
      case '1':  channelDisplay = 0;   break;
      case '2':  channelDisplay = 1;   break;
      case '3':  channelDisplay = 2;   break;
      case '4':  channelDisplay = 3;   break;
      case '5':  channelDisplay = 4;   break;
      case '6':  channelDisplay = 5;   break;
      case '7':  channelDisplay = 6;   break;
      case '8':  channelDisplay = 7;   break;
      case '9':  channelDisplay = 8;   break;
      case 'q':  channelDisplay = 9;   break;
      case 'w':  channelDisplay = 10;  break;
      case 'e':  channelDisplay = 11;  break;
      case 'r':  channelDisplay = 12;  break;
      case 't':  channelDisplay = 13;  break;
      case 'y':  channelDisplay = 14;  break;
      case 'u':  channelDisplay = 15;  break;
      case 'i':  channelDisplay = 16;  break;
      case ' ':  
         if (channelDisplay == 17) {
            channelDisplay = oldDisplay;
         } else {
            oldDisplay = channelDisplay;
            channelDisplay = 17; 
         }
         break;
      case 'd':  commandDisplay = DEC_DISPLAY; return;
      case 'h':  commandDisplay = HEX_DISPLAY; return;
      default:   channelDisplay = -1; 
   }
   if (channelDisplay >= 0 && channelDisplay < 16) {
      cout << "Displaying MIDI channel " << channelDisplay + 1 
           << " data." << endl;
   } else if (channelDisplay < 0) {
      cout << "Displaying all MIDI channels " << endl;
   } else if (channelDisplay == 16) {
      cout << "Displaying system messages" << endl;
   }

}


/*------------------ end improvization algorithms -----------------------*/


// md5sum: 47ebe8e53aaa843c2833307d89472e56 chanscope.cpp [20050403]