#include #include #include #include #include #include int getvolume() { int fd; int vol=-1; if ((fd = open ("/dev/mixer", O_RDONLY))<0) return -1; if((ioctl(fd,SOUND_MIXER_READ_PCM, &vol)) < 0) perror("Volume"); close(fd); return vol; } char setvolume(int vol) { int fd; if ((fd = open ("/dev/mixer", O_WRONLY))<0) return -1; if((ioctl(fd,SOUND_MIXER_WRITE_PCM, &vol)) < 0) perror("Volume"); close(fd); return 0; } void printusage(char* name) { printf("%s v. 0.9\n",name); return; } int main(int argc, char **argv) { int vol=-1,help; char ch; extern char *optarg; if (argc<2) { printusage(argv[0]); return -1; } while ((ch=getopt(argc,argv,"r:s:"))!=-1) switch (ch) { case 's': vol=atoi(optarg); vol|=vol<<8; break; case 'r': vol=atoi(optarg); vol=(vol<0?-1:1)*(abs(vol)+(abs(vol)<<8)); help=getvolume(); if (vol<0 && vol+help<0) {vol=0; break;} if (vol>0 && vol+help>0x6464) {vol=0x6464; break;} vol+=help; break; default: printusage(argv[0]); return -1; } if (vol==-1) { vol=atoi(argv[1]); vol|=vol<<8; } if (setvolume(vol)) return 0; else return 1; }