659 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			659 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/*   
 | 
						|
 *  mixer
 | 
						|
 *
 | 
						|
 *  Michel R. Prevenier.
 | 
						|
 */
 | 
						|
 | 
						|
#include <sys/types.h>
 | 
						|
#include <errno.h>
 | 
						|
#include <curses.h>
 | 
						|
#include <signal.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <unistd.h>
 | 
						|
#include <fcntl.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <string.h>
 | 
						|
#include <sys/ioctl.h>
 | 
						|
#include <minix/sound.h>
 | 
						|
 | 
						|
#define CURS_CTRL	'\033'
 | 
						|
#define ESCAPE		27
 | 
						|
#define UP   		'A'
 | 
						|
#define DOWN		'B'
 | 
						|
#define LEFT		'D'
 | 
						|
#define RIGHT		'C'
 | 
						|
#define SPACE		' '
 | 
						|
 | 
						|
 | 
						|
_PROTOTYPE ( int main, (int arg, char **argv));
 | 
						|
_PROTOTYPE ( void usage, (void));
 | 
						|
_PROTOTYPE ( void non_interactive, (void));
 | 
						|
_PROTOTYPE ( void setup_screen, (void));
 | 
						|
_PROTOTYPE ( int read_settings, (void));
 | 
						|
_PROTOTYPE ( int write_settings, (void));
 | 
						|
_PROTOTYPE ( void rdwr_levels, (int flag));
 | 
						|
_PROTOTYPE ( void rdwr_inputs, (int flag));
 | 
						|
_PROTOTYPE ( void rdwr_outputs, (int flag));
 | 
						|
_PROTOTYPE ( void create_slider, (int x, int y, enum Device device));
 | 
						|
_PROTOTYPE ( void show_inputs, (int x, int y));
 | 
						|
_PROTOTYPE ( void show_outputs, (int x, int y));
 | 
						|
_PROTOTYPE ( char *d_name, (enum Device device, char *name));
 | 
						|
_PROTOTYPE ( void user_interface, (void));
 | 
						|
_PROTOTYPE ( void terminate, (int s));
 | 
						|
 | 
						|
WINDOW *main_win;
 | 
						|
int old_stdin;
 | 
						|
int fd;
 | 
						|
char name[9];
 | 
						|
char *file_name;
 | 
						|
struct volume_level levels[9];
 | 
						|
struct inout_ctrl inputs_left[9];
 | 
						|
struct inout_ctrl inputs_right[9];
 | 
						|
struct inout_ctrl outputs[9];
 | 
						|
 | 
						|
 | 
						|
void usage()
 | 
						|
{
 | 
						|
  fprintf(stderr, "Usage: mixer [-r]\n");
 | 
						|
  exit(-1);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void terminate(s)
 | 
						|
int s;
 | 
						|
{
 | 
						|
  /* Restore terminal parameters and exit */
 | 
						|
 | 
						|
  (void) fcntl(0,F_SETFL,old_stdin);
 | 
						|
  move(23, 0);			
 | 
						|
  refresh();			
 | 
						|
  resetty();
 | 
						|
  endwin();			
 | 
						|
  exit(1);		
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int write_settings()
 | 
						|
{
 | 
						|
  /* Write the current mixer settings to $HOME/.mixer */
 | 
						|
 | 
						|
  int fd;
 | 
						|
 | 
						|
  if ((fd = creat(file_name, 0x124)) > 0)
 | 
						|
  {
 | 
						|
    write(fd, levels, sizeof(levels));
 | 
						|
    write(fd, inputs_left, sizeof(inputs_left));
 | 
						|
    write(fd, inputs_right, sizeof(inputs_right));
 | 
						|
    write(fd, outputs, sizeof(outputs));
 | 
						|
    close(fd);
 | 
						|
    return 1;
 | 
						|
  }
 | 
						|
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int read_settings()
 | 
						|
{
 | 
						|
  /* Restore mixer settings saved in $HOME/.mixer */
 | 
						|
 | 
						|
  int fd;
 | 
						|
 | 
						|
  if ((fd = open(file_name, O_RDONLY)) > 0)
 | 
						|
  {
 | 
						|
    read(fd, levels, sizeof(levels));
 | 
						|
    read(fd, inputs_left, sizeof(inputs_left));
 | 
						|
    read(fd, inputs_right, sizeof(inputs_right));
 | 
						|
    read(fd, outputs, sizeof(outputs));
 | 
						|
    close(fd);
 | 
						|
    rdwr_levels(1);
 | 
						|
    rdwr_outputs(1);
 | 
						|
    rdwr_inputs(1);
 | 
						|
    return 1;
 | 
						|
  }
 | 
						|
  return 0;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void rdwr_levels(flag)
 | 
						|
int flag;             /* 0 = read, 1 = write */
 | 
						|
{
 | 
						|
  /* Get or set mixer settings */
 | 
						|
 | 
						|
  int i;
 | 
						|
  int cmd;
 | 
						|
 
 | 
						|
  cmd = (flag == 0 ? MIXIOGETVOLUME : MIXIOSETVOLUME);  
 | 
						|
  
 | 
						|
  for(i = Master; i <= Bass; i++)
 | 
						|
    (void) (ioctl(fd, cmd, &levels[i])); 
 | 
						|
}    
 | 
						|
 | 
						|
 | 
						|
void rdwr_inputs(flag)
 | 
						|
int flag;              /* 0 = read, 1 = write */
 | 
						|
{
 | 
						|
  /* Get or set input settings */
 | 
						|
 | 
						|
  int i;
 | 
						|
  int cmd_left, cmd_right;
 | 
						|
  
 | 
						|
  cmd_left = (flag == 0 ? MIXIOGETINPUTLEFT : MIXIOSETINPUTLEFT);  
 | 
						|
  cmd_right = (flag == 0 ? MIXIOGETINPUTRIGHT : MIXIOSETINPUTRIGHT);  
 | 
						|
 | 
						|
  for(i = Fm; i <= Mic; i++)
 | 
						|
  {
 | 
						|
    (void) (ioctl(fd, cmd_left, &inputs_left[i])); 
 | 
						|
    (void) (ioctl(fd, cmd_right, &inputs_right[i])); 
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void rdwr_outputs(flag)
 | 
						|
int flag;               /* 0 = read, 1 = write */
 | 
						|
{
 | 
						|
  /* Get or set output settings */
 | 
						|
 | 
						|
  int i;
 | 
						|
  int cmd; 
 | 
						|
 | 
						|
  cmd = (flag == 0 ? MIXIOGETOUTPUT : MIXIOSETOUTPUT);  
 | 
						|
 | 
						|
  for(i = Cd; i <= Mic; i++)
 | 
						|
    (void) (ioctl(fd, cmd, &outputs[i])); 
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
int main(argc, argv)
 | 
						|
int argc;
 | 
						|
char **argv;
 | 
						|
 | 
						|
{
 | 
						|
  int i;
 | 
						|
  char *home_ptr;
 | 
						|
  int fd2;
 | 
						|
 | 
						|
  /* Open mixer */
 | 
						|
  if ((fd = open("/dev/mixer",O_RDONLY)) < 0)
 | 
						|
  {
 | 
						|
    fprintf(stderr, "Cannot open /dev/mixer\n");
 | 
						|
    exit(-1);
 | 
						|
  }
 | 
						|
 | 
						|
  /* Get user's home directory and construct the $HOME/.mixer
 | 
						|
   * file name 
 | 
						|
   */
 | 
						|
  home_ptr = getenv("HOME");
 | 
						|
  file_name = malloc(strlen(home_ptr)+strlen("mixer.ini\0"));
 | 
						|
  if (file_name == (char *)0) 
 | 
						|
  {
 | 
						|
    fprintf(stderr, "Not enough memory\n");
 | 
						|
    exit(-1);
 | 
						|
  }
 | 
						|
  strncpy(file_name, home_ptr, strlen(home_ptr));
 | 
						|
  strncpy(file_name+strlen(home_ptr), "/.mixer\0", 9);
 | 
						|
 | 
						|
  /* Fill in the device numbers */    
 | 
						|
  for(i = Master; i <= Bass; i++) 
 | 
						|
  {
 | 
						|
    levels[i].device = i;
 | 
						|
    inputs_left[i].device = i;
 | 
						|
    inputs_right[i].device = i;
 | 
						|
    outputs[i].device = i;
 | 
						|
  }
 | 
						|
 | 
						|
  /* Get arguments */
 | 
						|
  if (argc > 1)
 | 
						|
  {
 | 
						|
    if (strncmp(argv[1], "-r", 2) == 0)
 | 
						|
    {
 | 
						|
      if (read_settings())
 | 
						|
      {
 | 
						|
        printf("Mixer settings restored\n");
 | 
						|
        exit(0);
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
        fprintf(stderr, "Could not restore mixer settings\n");
 | 
						|
        exit(-1);
 | 
						|
      }
 | 
						|
    } 
 | 
						|
    else usage();
 | 
						|
  }
 | 
						|
 | 
						|
  /* Initialize windows. */
 | 
						|
  (void) initscr();
 | 
						|
  signal(SIGINT, terminate);
 | 
						|
  old_stdin = fcntl(0,F_GETFL);
 | 
						|
  cbreak();
 | 
						|
  noecho();
 | 
						|
  main_win = newwin(23,80,0,0);
 | 
						|
  scrollok(main_win, FALSE);
 | 
						|
 | 
						|
  /* Read all current mixer settings */
 | 
						|
  rdwr_levels(0);
 | 
						|
  rdwr_inputs(0);
 | 
						|
  rdwr_outputs(0);
 | 
						|
 | 
						|
  /* Set up the user screen and handle user input */
 | 
						|
  setup_screen();
 | 
						|
  user_interface();
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void user_interface()
 | 
						|
{
 | 
						|
  /* This is the user interface. */
 | 
						|
 
 | 
						|
  char c;
 | 
						|
  int x,y;
 | 
						|
  int right;
 | 
						|
  int input_scr, input_pos;
 | 
						|
  int output_scr, output_pos;
 | 
						|
  int max_level;
 | 
						|
  enum Device device;
 | 
						|
  int fd2;
 | 
						|
 
 | 
						|
  device = Master;
 | 
						|
  right = 0;
 | 
						|
  input_scr = 0;
 | 
						|
  output_scr = 0;
 | 
						|
  input_pos = 0;
 | 
						|
  output_pos = 0;
 | 
						|
 | 
						|
  while(1)
 | 
						|
  {
 | 
						|
    if (input_scr)
 | 
						|
    {
 | 
						|
      y = device + 9;
 | 
						|
      x = 51 + input_pos + (device == Mic ? 2 : 0);
 | 
						|
    }
 | 
						|
    else if (output_scr)
 | 
						|
    {
 | 
						|
      y = device + 15;
 | 
						|
      x = 53 + output_pos + (device == Mic ? 4 : 0);
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      y = (device != Speaker ? 2 : 1) + 
 | 
						|
          (device - (device < Treble ? 0 : Treble)) * 3 + 
 | 
						|
          (right == 0 ? 0 : 1);
 | 
						|
      if (!right)
 | 
						|
        x = 9 + levels[device].left / (device < Speaker ? 2 : 1 ) +
 | 
						|
              (device > Speaker ? 39 : 0);
 | 
						|
      else
 | 
						|
        x = 9 + levels[device].right / (device < Speaker ? 2 : 1) +
 | 
						|
              (device > Speaker ? 39 : 0);
 | 
						|
    }
 | 
						|
    
 | 
						|
    wmove(main_win,y,x);
 | 
						|
    wrefresh(main_win);
 | 
						|
    c = wgetch(main_win);
 | 
						|
 | 
						|
    switch(c)
 | 
						|
    {
 | 
						|
      case CURS_CTRL:
 | 
						|
      {
 | 
						|
        (void) wgetch(main_win);
 | 
						|
        c = wgetch(main_win);
 | 
						|
        
 | 
						|
        switch(c)
 | 
						|
        { 
 | 
						|
          case DOWN: 
 | 
						|
          {
 | 
						|
           if (output_scr) 
 | 
						|
           {
 | 
						|
             if (device < Mic)
 | 
						|
             {
 | 
						|
                device++;
 | 
						|
                if (device == Mic) output_pos = 0;
 | 
						|
             }
 | 
						|
           }
 | 
						|
           else if (right || input_scr)
 | 
						|
           {
 | 
						|
             if (!input_scr)
 | 
						|
             {
 | 
						|
               if (device < Bass) 
 | 
						|
               {
 | 
						|
                 device++;         
 | 
						|
                 right = 0;
 | 
						|
               }
 | 
						|
               else
 | 
						|
               {  
 | 
						|
                 input_scr = 1;
 | 
						|
                 input_pos = 0;
 | 
						|
                 device = Fm;
 | 
						|
               }
 | 
						|
             }
 | 
						|
             else
 | 
						|
             {
 | 
						|
               if (device < Mic) 
 | 
						|
               {
 | 
						|
                 device++;
 | 
						|
                 if (device == Mic && input_pos > 8) input_pos = 8;
 | 
						|
               }
 | 
						|
               else 
 | 
						|
               { 
 | 
						|
                 device = Cd; 
 | 
						|
                 output_scr = 1; 
 | 
						|
                 input_scr = 0; 
 | 
						|
                 output_pos = 0; 
 | 
						|
               }
 | 
						|
             }
 | 
						|
           }
 | 
						|
           else 
 | 
						|
           {
 | 
						|
             if (device != Mic && device != Speaker)  right = 1;
 | 
						|
             else { device++; right = 0; }
 | 
						|
           }
 | 
						|
          };break;
 | 
						|
          case UP: 
 | 
						|
          {
 | 
						|
           if (output_scr) 
 | 
						|
           {
 | 
						|
             if (device > Cd) device--;
 | 
						|
             else 
 | 
						|
             {
 | 
						|
               device = Mic; 
 | 
						|
               output_scr = 0;
 | 
						|
               input_scr = 1;
 | 
						|
             }
 | 
						|
           }
 | 
						|
           else if (!right || input_scr)
 | 
						|
           {
 | 
						|
             if (input_scr)
 | 
						|
             {
 | 
						|
               if (device > Fm) device--;
 | 
						|
               else 
 | 
						|
               {
 | 
						|
                 input_scr = 0;
 | 
						|
                 device = Bass;
 | 
						|
                 right = 1;
 | 
						|
               }
 | 
						|
             }
 | 
						|
             else 
 | 
						|
             {
 | 
						|
               if (device > Master) 
 | 
						|
               {
 | 
						|
                 device--;         
 | 
						|
                 if (device != Mic && device != Speaker) right = 1;
 | 
						|
               }
 | 
						|
             }
 | 
						|
           }
 | 
						|
           else 
 | 
						|
             right = 0;
 | 
						|
          };break;
 | 
						|
          case RIGHT: 
 | 
						|
          {
 | 
						|
            if (output_scr) 
 | 
						|
            {
 | 
						|
              if (output_pos < 8 && device != Mic) output_pos = 8;
 | 
						|
            }
 | 
						|
            else if (!input_scr)
 | 
						|
            {
 | 
						|
              if (device < Speaker) max_level = 31;
 | 
						|
              else if (device > Speaker) max_level = 15;
 | 
						|
              else max_level = 4;
 | 
						|
 | 
						|
              if (!right) 
 | 
						|
              {
 | 
						|
                if (levels[device].left < max_level) levels[device].left+=
 | 
						|
                  (device < Speaker ? 2 : 1);
 | 
						|
              }
 | 
						|
              else
 | 
						|
              {
 | 
						|
                if (levels[device].right < max_level) levels[device].right+=
 | 
						|
                  (device < Speaker ? 2 : 1);
 | 
						|
              }
 | 
						|
              ioctl(fd, MIXIOSETVOLUME, &levels[device]); 
 | 
						|
              ioctl(fd, MIXIOGETVOLUME, &levels[device]); 
 | 
						|
              create_slider(1 + (device < Treble ? 0 : 39), 
 | 
						|
                            (device - (device < Treble ? 0 : Treble))*3 +
 | 
						|
                            (device != Speaker ? 2 : 1), device);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
              if ((device != Mic && input_pos < 12) ||
 | 
						|
                  (device == Mic && input_pos < 8))
 | 
						|
                input_pos += (4 + (device == Mic ? 4 : 0));
 | 
						|
            }
 | 
						|
          };break;
 | 
						|
          case LEFT: 
 | 
						|
          {
 | 
						|
            if (output_scr)
 | 
						|
            {
 | 
						|
              if (output_pos > 0) output_pos = 0;
 | 
						|
            }
 | 
						|
            else if (!input_scr)
 | 
						|
            {
 | 
						|
              if (!right)
 | 
						|
              {
 | 
						|
                if (levels[device].left > 0) levels[device].left-=
 | 
						|
                  (device < Speaker ? 2 : 1);
 | 
						|
              }
 | 
						|
              else
 | 
						|
              {
 | 
						|
                if (levels[device].right > 0) levels[device].right-=
 | 
						|
                  (device < Speaker ? 2 : 1);
 | 
						|
              }
 | 
						|
              ioctl(fd, MIXIOSETVOLUME, &levels[device]); 
 | 
						|
              ioctl(fd, MIXIOGETVOLUME, &levels[device]); 
 | 
						|
              create_slider(1 + (device < Treble ? 0 : 39), 
 | 
						|
                            (device - (device < Treble ? 0 : Treble))*3 +
 | 
						|
                            (device != Speaker ? 2 : 1), device);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
              if (input_pos > 0) 
 | 
						|
                input_pos -= (4 + (device == Mic ? 4 : 0));
 | 
						|
            } 
 | 
						|
          };break;
 | 
						|
        } 
 | 
						|
      };break;
 | 
						|
    case SPACE:
 | 
						|
      {
 | 
						|
        if (output_scr)
 | 
						|
        {
 | 
						|
          switch(output_pos)
 | 
						|
          {
 | 
						|
            case 0:
 | 
						|
            case 4:
 | 
						|
            {
 | 
						|
              outputs[device].left = 
 | 
						|
               (outputs[device].left == ON ? OFF : ON);
 | 
						|
              ioctl(fd, MIXIOSETOUTPUT, &outputs[device]);
 | 
						|
            };break;
 | 
						|
            case 8:
 | 
						|
            {
 | 
						|
              outputs[device].right = 
 | 
						|
               (outputs[device].right == ON ? OFF : ON);
 | 
						|
              ioctl(fd, MIXIOSETOUTPUT, &outputs[device]);
 | 
						|
            };break;
 | 
						|
          }
 | 
						|
          ioctl(fd, MIXIOGETOUTPUT, &outputs[device]);
 | 
						|
          show_outputs(41,16);
 | 
						|
        }
 | 
						|
        else if (input_scr)
 | 
						|
        { 
 | 
						|
          switch(input_pos)
 | 
						|
          {
 | 
						|
            case 0:
 | 
						|
            {
 | 
						|
              inputs_left[device].left = 
 | 
						|
               (inputs_left[device].left == ON ? OFF : ON);
 | 
						|
              ioctl(fd, MIXIOSETINPUTLEFT, &inputs_left[device]);
 | 
						|
            };break;
 | 
						|
            case 4:
 | 
						|
            {
 | 
						|
              inputs_left[device].right = 
 | 
						|
               (inputs_left[device].right == ON ? OFF : ON);
 | 
						|
              ioctl(fd, MIXIOSETINPUTLEFT, &inputs_left[device]);
 | 
						|
            };break;
 | 
						|
            case 8:
 | 
						|
            {
 | 
						|
              inputs_right[device].left = 
 | 
						|
               (inputs_right[device].left == ON ? OFF : ON);
 | 
						|
              ioctl(fd, MIXIOSETINPUTRIGHT, &inputs_right[device]);
 | 
						|
            };break;
 | 
						|
            case 12:
 | 
						|
            {
 | 
						|
              inputs_right[device].right = 
 | 
						|
               (inputs_right[device].right == ON ? OFF : ON);
 | 
						|
              ioctl(fd, MIXIOSETINPUTRIGHT, &inputs_right[device]);
 | 
						|
            };break;
 | 
						|
          }
 | 
						|
          ioctl(fd, MIXIOGETINPUTLEFT, &inputs_left[device]);
 | 
						|
          ioctl(fd, MIXIOGETINPUTRIGHT, &inputs_right[device]);
 | 
						|
          show_inputs(41,8);
 | 
						|
        }
 | 
						|
      };break;
 | 
						|
      case 's':
 | 
						|
      {
 | 
						|
        if (write_settings())  
 | 
						|
          mvwprintw(main_win,22,28, "mixer settings saved");
 | 
						|
        else
 | 
						|
          mvwprintw(main_win,22,28, "error: file not saved");
 | 
						|
        wrefresh(main_win);
 | 
						|
        sleep(1);
 | 
						|
        mvwprintw(main_win,22,28, "                           ");
 | 
						|
      };break;
 | 
						|
      case 'r':
 | 
						|
      {
 | 
						|
        if (read_settings())
 | 
						|
          mvwprintw(main_win,22,28, "mixer settings restored");
 | 
						|
        else
 | 
						|
          mvwprintw(main_win,22,28, "error: could not open");
 | 
						|
        wrefresh(main_win);
 | 
						|
        sleep(1);
 | 
						|
        setup_screen();
 | 
						|
      };break;
 | 
						|
      case 'e': terminate(1);
 | 
						|
    }
 | 
						|
  } 
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
char *d_name(device, name)
 | 
						|
enum Device device;
 | 
						|
char *name;
 | 
						|
{
 | 
						|
  /* Convert the device number to a name */
 | 
						|
 | 
						|
  switch (device)
 | 
						|
  {
 | 
						|
    case Master:	strncpy(name, "Master  \0", 9);break;
 | 
						|
    case Dac:		strncpy(name, "Dac     \0", 9);break;
 | 
						|
    case Fm:		strncpy(name, "Fm      \0", 9);break;
 | 
						|
    case Cd:		strncpy(name, "CD      \0", 9);break;
 | 
						|
    case Line:		strncpy(name, "Line    \0", 9);break;
 | 
						|
    case Mic:		strncpy(name, "Mic     \0", 9);break;
 | 
						|
    case Speaker:	strncpy(name, "Speaker \0", 9);break;
 | 
						|
    case Treble:	strncpy(name, "Treble  \0", 9);break;
 | 
						|
    case Bass:		strncpy(name, "Bass    \0", 9);break;
 | 
						|
  }
 | 
						|
  return name;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void create_slider(x, y, device)
 | 
						|
int x;
 | 
						|
int y;
 | 
						|
enum Device device;
 | 
						|
{
 | 
						|
  /* Create a slider on the screen */
 | 
						|
 | 
						|
  int left;
 | 
						|
  int right;
 | 
						|
  int i;
 | 
						|
 | 
						|
  mvwprintw(main_win,y,x, "%s", d_name(device, name));
 | 
						|
 | 
						|
  left = levels[device].left / (device < Speaker ? 2 : 1); 
 | 
						|
  right = levels[device].right / (device < Speaker ? 2 : 1); 
 | 
						|
 | 
						|
  for (i = 0; i < 16; i++)
 | 
						|
  {
 | 
						|
    if (device != Speaker || i < 4)
 | 
						|
      mvwprintw(main_win,y,x+i+8, (i == left ? "*" : "-"));
 | 
						|
    if (device < Mic || device > Speaker) 
 | 
						|
      mvwprintw(main_win,y+1,x+i+8, (i == right ? "*" : "-"));
 | 
						|
  }
 | 
						|
 | 
						|
  if (device < Mic || device > Speaker)
 | 
						|
  {
 | 
						|
    mvwprintw(main_win,y,x+i+10, "left");
 | 
						|
    mvwprintw(main_win,y+1,x+i+10, "right");
 | 
						|
  }
 | 
						|
  wrefresh(main_win);
 | 
						|
} 
 | 
						|
  
 | 
						|
void show_inputs(x,y)
 | 
						|
int x;
 | 
						|
int y;
 | 
						|
{
 | 
						|
  /* Show the input settings */
 | 
						|
 | 
						|
  int i;
 | 
						|
 | 
						|
  mvwprintw(main_win,y,x,  "             Rec-In  ");
 | 
						|
  mvwprintw(main_win,y+1,x,"          left    right");
 | 
						|
  mvwprintw(main_win,y+2,x,"          l   r   l   r");
 | 
						|
  for (i = Fm; i <= Line; i++)
 | 
						|
  {
 | 
						|
    mvwprintw(main_win,y+i+1,x,  "%s  %d   %d   %d   %d", 
 | 
						|
      d_name(i, (char *)name),
 | 
						|
      (inputs_left[i].left == ON ? 1 : 0),
 | 
						|
      (inputs_left[i].right == ON ? 1 : 0),
 | 
						|
      (inputs_right[i].left == ON ? 1 : 0),
 | 
						|
      (inputs_right[i].right == ON ? 1 : 0));
 | 
						|
  }
 | 
						|
  mvwprintw(main_win,y+i+1,x,  "%s    %d       %d", 
 | 
						|
    d_name(Mic, (char *)name),
 | 
						|
    (inputs_left[Mic].left == ON ? 1 : 0),
 | 
						|
    (inputs_right[Mic].left == ON ? 1 : 0));
 | 
						|
  wrefresh(main_win);
 | 
						|
}
 | 
						|
 | 
						|
void show_outputs(x,y)
 | 
						|
int x;
 | 
						|
int y;
 | 
						|
{
 | 
						|
  /* Show the output settings */
 | 
						|
 | 
						|
  int i;
 | 
						|
 | 
						|
  mvwprintw(main_win,y,x,      "            Mix-Out  ");
 | 
						|
  mvwprintw(main_win,y+1,x,    "          left    right");
 | 
						|
  for (i = Cd; i <= Line; i++)
 | 
						|
  {
 | 
						|
    mvwprintw(main_win,y+i-1,x,"%s    %d       %d", 
 | 
						|
      d_name(i, (char *)name),
 | 
						|
      (outputs[i].left == ON ? 1 : 0),
 | 
						|
      (outputs[i].right == ON ? 1 : 0));
 | 
						|
  }
 | 
						|
  mvwprintw(main_win,y+i-1,x,"%s        %d", 
 | 
						|
    d_name(Mic, (char *)name),
 | 
						|
    (outputs[Mic].left == ON ? 1 : 0));
 | 
						|
 | 
						|
  wrefresh(main_win);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
void setup_screen()
 | 
						|
{
 | 
						|
  int i;
 | 
						|
 | 
						|
  wclear(main_win);
 | 
						|
  mvwprintw(main_win,0,23,"------- Mixer Controls -------");
 | 
						|
  wrefresh(main_win);
 | 
						|
 
 | 
						|
  for(i = 0; i <= Speaker; i++)
 | 
						|
   create_slider(1, i*3+(i <= Mic ? 2 : 1), i);
 | 
						|
 | 
						|
   create_slider(40, 2, Treble);
 | 
						|
   create_slider(40, 5, Bass);
 | 
						|
 
 | 
						|
   show_inputs(41,8);
 | 
						|
   show_outputs(41,16);
 | 
						|
}
 |