#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <linux/soundcard.h>

int read_vol(int fd) {
	int v=0;
	if (ioctl(fd, SOUND_MIXER_READ_VOLUME, &v))
		warn("read volume");
	return v;
}

void write_vol(int fd,int v) {
	if (ioctl(fd,SOUND_MIXER_WRITE_VOLUME,&v))
		warn("warn volume");
}


int main(int argc,char **argv) {
	int fd;
	int u=0;
	char *pn= argv[0];
	fd= open("/dev/mixer",O_RDWR);
	if (fd<0)
		err(2,"can't open /dev/mixer");
	while(!u && argc>1) {
		if (!strcmp(argv[1],"+"))
			write_vol(fd, read_vol(fd)*1.1);
		else if (!strcmp(argv[1],"-"))
			write_vol(fd, read_vol(fd)*0.9);
		else if (argv[1][0]=='+')
			write_vol(fd, read_vol(fd)+atoi(argv[1]+1));
		else if (argv[1][0]=='-')
			write_vol(fd, read_vol(fd)-atoi(argv[1]+1));
		else if (isdigit(argv[1][0]))
			write_vol(fd, atoi(argv[1]));
		else u=1;
		argc--;
		argv++;
	}
	if (u)
		fprintf(stderr,"usage: %s [n|+|-|+n|-n]\n",pn);
	else
		printf("volume= %d\n",read_vol(fd));
	close(fd);
	return 0;
}

