/* Sets input and output filters on Soundblaster Pro card */

#include <stdio.h>

int on_off_val, hi_lo_val, dnfi_val;
int reg_0C_val, reg_0E_val;

main(int argc,char **argv)
{
    if(argc > 1)
    {
         on_off_val = atoi(argv[1]);

         outportb(0x224,0x0C);
         reg_0C_val = inportb(0x225);

         switch(on_off_val)
         {
              case 1:   reg_0C_val = reg_0C_val & 0xDF;
                        if(argc == 4)
                             hi_lo_val = atoi(argv[2]);
                        else break;

                        switch(hi_lo_val){
                        case 1: reg_0C_val = reg_0C_val | 0x08;break;
                        case 0: reg_0C_val = reg_0C_val & 0xF7;break;
                        }
                        break;

              case 0:   reg_0C_val = reg_0C_val | 0x20;
         }
         outportb(0x224,0x0C);
         outportb(0x225,reg_0C_val);

         dnfi_val = atoi(argv[argc-1]);

         outportb(0x224,0x0E);
         reg_0E_val = inportb(0x225);

         switch(dnfi_val)
         {
              case 1: reg_0E_val = reg_0E_val & 0xDF;break;
              case 0: reg_0E_val = reg_0E_val | 0x20;break;
         }

         outportb(0x224,0x0E);
         outportb(0x225,reg_0E_val);
    }
    else
    {
         printf("Sets filters on Soundblaster Pro sound card\n");
         printf("usage: setfilt <ANFIOnOff> [<FiltType>] <DNFIOnOff>\n\n");
         printf("ANFI, DNFI: 1=On, 0=Off    FiltType: 1=High, 0=Low\n");
    }
}