diff -Nru volumecontrol.app-0.5/AppController.m volumecontrol.app-0.6/AppController.m --- volumecontrol.app-0.5/AppController.m 2005-07-31 16:54:20.000000000 +0000 +++ volumecontrol.app-0.6/AppController.m 2017-01-11 13:51:16.000000000 +0000 @@ -3,19 +3,380 @@ #include #include "AppController.h" -#include +#include #include /* control device */ #include +#include +#ifdef __linux__ +#include + +static snd_mixer_t *handle; +static snd_mixer_elem_t *volumeElem; +static snd_mixer_elem_t *bassElem; +static snd_mixer_elem_t *trebleElem; +static snd_mixer_elem_t *pcmElem; +static snd_mixer_elem_t *lineElem; +static BOOL mixerOpened = NO; + +/* The "default" device seems to be managed by pulseaudio these days + (at least on most desktops), so stick to the real one. This + doesn't cope well with multiple cards, but we have a hardcoded GUI + anyway so that is the last problem. */ +#define DEVICE_NAME "hw:0" + +/* Convenience macro to die in informational manner. */ +#define DIE(msg) \ + { \ + NSRunCriticalAlertPanel (@"Error", \ + msg @"\nThe application will terminate.", \ + @"OK", nil, nil); \ + exit (EXIT_FAILURE); \ + } +#else #define DEVICE_NAME "/dev/mixer" int mixer_fd; static int ovol,ovol2,ovol3,ovol4,ovol5; +#endif @implementation AppController +#ifdef __linux__ +- (void) refresh +{ + int poll_count, fill_count; + long lvol, lvol_r; + struct pollfd *polls; + unsigned short revents; + + poll_count = snd_mixer_poll_descriptors_count (handle); + if (poll_count <= 0) + DIE (@"Cannot obtain mixer poll descriptors."); + + polls = alloca ((poll_count + 1) * sizeof (struct pollfd)); + fill_count = snd_mixer_poll_descriptors (handle, polls, poll_count); + NSAssert (poll_count = fill_count, @"poll counts differ"); + + poll (polls, fill_count + 1, 5); + + /* Ensure that changes made via other programs (alsamixer, etc.) get + reflected as well. */ + snd_mixer_poll_descriptors_revents (handle, polls, poll_count, &revents); + if (revents & POLLIN) + snd_mixer_handle_events (handle); + + if (volumeElem) + { + snd_mixer_selem_get_playback_volume (volumeElem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + [volL setIntValue: lvol]; + if (snd_mixer_selem_is_playback_mono (volumeElem)) + [volR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (volumeElem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [volR setIntValue: lvol_r]; + } + } + + if (bassElem) + { + snd_mixer_selem_get_playback_volume (bassElem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + [bassL setIntValue: lvol]; + if (snd_mixer_selem_is_playback_mono (bassElem)) + [bassR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (bassElem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [bassR setIntValue: lvol_r]; + } + } + + if (trebleElem) + { + snd_mixer_selem_get_playback_volume (trebleElem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + [trebleL setIntValue: lvol]; + if (snd_mixer_selem_is_playback_mono (trebleElem)) + [trebleR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (trebleElem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [trebleR setIntValue: lvol_r]; + } + } + + if (pcmElem) + { + snd_mixer_selem_get_playback_volume (pcmElem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + [pcmL setIntValue: lvol]; + if (snd_mixer_selem_is_playback_mono (pcmElem)) + [pcmR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (pcmElem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [pcmR setIntValue: lvol_r]; + } + } + + if (lineElem) + { + snd_mixer_selem_get_playback_volume (lineElem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + [lineL setIntValue: lvol]; + if (snd_mixer_selem_is_playback_mono (lineElem)) + [lineR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (lineElem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [lineR setIntValue: lvol_r]; + } + } +} + +- (void) openMixer +{ + if (snd_mixer_open (&handle, 0) < 0) + DIE (@"Cannot open mixer."); + if (snd_mixer_attach (handle, DEVICE_NAME) < 0) + DIE (@"Cannot attach mixer."); + if (snd_mixer_selem_register (handle, NULL, NULL) < 0) + DIE (@"Cannot register the mixer elements."); + if (snd_mixer_load (handle) < 0) + DIE (@"Cannot load mixer."); + + [NSTimer scheduledTimerWithTimeInterval: 0.5 + target: self + selector: @selector(refresh) + userInfo: nil + repeats: YES]; + [NSApp setDelegate: self]; + mixerOpened = YES; +} + +- (void) controlNotAvailable: (id) sender +{ + NSRunInformationalAlertPanel (@"Control missing", + @"It looks like the sound card does not " + @"have this type of control.", + @"OK", nil, nil); + [sender setIntValue: 0]; + [sender setEnabled: NO]; +} + +- (void) applicationWillTerminate: (NSNotification *) notification +{ + snd_mixer_detach (handle, DEVICE_NAME); + snd_mixer_close (handle); +} +#endif - (void) awakeFromNib { /* read volume settings, and set buttons */ +#ifdef __linux__ + snd_mixer_elem_t *elem; + snd_mixer_selem_id_t *sid; + long lvol, lvol_r, min, max; + + if (!mixerOpened) + [self openMixer]; + + snd_mixer_selem_id_alloca (&sid); + + for (elem = snd_mixer_first_elem (handle); elem; + elem = snd_mixer_elem_next (elem)) + { + if (snd_mixer_selem_is_active (elem) + && snd_mixer_selem_has_playback_volume (elem)) + { + /* Because our controls are hardcoded in the .gorm file we + can't construct the UI on the fly based on the + available elements, as it should be done normally. So + resort to dumb parsing in the hope that the names of + the elements match ours. This is far from ideal; the + master element may be called "Front", for example. */ + snd_mixer_selem_get_id (elem, sid); + if (!strcmp (snd_mixer_selem_id_get_name (sid), "Master")) + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + snd_mixer_selem_get_playback_volume_range (elem, &min, &max); + [volL setMinValue: min]; + [volL setMaxValue: max]; + [volL setIntValue: lvol]; + [volR setMinValue: min]; + [volR setMaxValue: max]; + if (snd_mixer_selem_is_playback_mono (elem)) + [volR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [volR setIntValue: lvol_r]; + } + + volumeElem = elem; + } + + /* It seems that most cards do not have bass/treble + controls. Oh well. */ + if (!strcmp (snd_mixer_selem_id_get_name (sid), "Bass")) + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + snd_mixer_selem_get_playback_volume_range (elem, &min, &max); + [bassL setMinValue: min]; + [bassL setMaxValue: max]; + [bassL setIntValue: lvol]; + [bassR setMinValue: min]; + [bassR setMaxValue: max]; + + if (snd_mixer_selem_is_playback_mono (elem)) + [bassR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [bassR setIntValue: lvol_r]; + } + + bassElem = elem; + } + + if (!strcmp (snd_mixer_selem_id_get_name (sid), "Treble")) + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + snd_mixer_selem_get_playback_volume_range (elem, &min, &max); + [trebleL setMinValue: min]; + [trebleL setMaxValue: max]; + [trebleL setIntValue: lvol]; + [trebleR setMinValue: min]; + [trebleR setMaxValue: max]; + + if (snd_mixer_selem_is_playback_mono (elem)) + [trebleR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [trebleR setIntValue: lvol_r]; + } + + trebleElem = elem; + } + + if (!strcmp (snd_mixer_selem_id_get_name (sid), "PCM")) + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + snd_mixer_selem_get_playback_volume_range (elem, &min, &max); + [pcmL setMinValue: min]; + [pcmL setMaxValue: max]; + [pcmL setIntValue: lvol]; + [pcmR setMinValue: min]; + [pcmR setMaxValue: max]; + if (snd_mixer_selem_is_playback_mono (elem)) + [pcmR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [pcmR setIntValue: lvol_r]; + } + + pcmElem = elem; + } + + if (!strcmp (snd_mixer_selem_id_get_name (sid), "Line")) + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_LEFT, + &lvol); + snd_mixer_selem_get_playback_volume_range (elem, &min, &max); + [lineL setMinValue: min]; + [lineL setMaxValue: max]; + [lineL setIntValue: lvol]; + [lineR setMinValue: min]; + [lineR setMaxValue: max]; + + if (snd_mixer_selem_is_playback_mono (elem)) + [lineR setIntValue: lvol]; + else + { + snd_mixer_selem_get_playback_volume (elem, + SND_MIXER_SCHN_FRONT_RIGHT, + &lvol_r); + [lineR setIntValue: lvol_r]; + } + + lineElem = elem; + } + } + } + + /* Disable controls that are beyond our control. */ + if (!volumeElem) /* <= Could happen in practice... */ + { + [volL setAction: @selector(controlNotAvailable:)]; + [volR setEnabled: NO]; + [volMute setEnabled: NO]; + [volLock setEnabled: NO]; + } + if (!bassElem) + { + [bassL setAction: @selector(controlNotAvailable:)]; + [bassR setEnabled: NO]; + [bassMute setEnabled: NO]; + [bassLock setEnabled: NO]; + } + if (!trebleElem) + { + [trebleL setAction: @selector(controlNotAvailable:)]; + [trebleR setEnabled: NO]; + [trebleMute setEnabled: NO]; + [trebleLock setEnabled: NO]; + } + if (!pcmElem) + { + [pcmL setAction: @selector(controlNotAvailable:)]; + [pcmR setEnabled: NO]; + [pcmMute setEnabled: NO]; + [pcmLock setEnabled: NO]; + } + if (!lineElem) + { + [lineL setAction: @selector(controlNotAvailable:)]; + [lineR setEnabled: NO]; + [lineMute setEnabled: NO]; + [lineLock setEnabled: NO]; + } +#else int vol; if ((mixer_fd=open(DEVICE_NAME, O_RDONLY | O_NONBLOCK, 0)) == -1) { @@ -46,11 +407,180 @@ timer=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self \ selector:@selector(awakeFromNib) userInfo:nil repeats:NO ]; +#endif } - (void) setVolume: (id)sender { /* set volume according to the buttons */ +#ifdef __linux__ + long vol; + + if (volumeElem) + { + if (![volMute state]) + { + vol = [volL intValue]; + snd_mixer_selem_set_playback_volume (volumeElem, + SND_MIXER_SCHN_FRONT_LEFT, + vol); + if ([volLock state]) + { + [volR setIntValue: vol]; + if (!snd_mixer_selem_is_playback_mono (volumeElem)) + snd_mixer_selem_set_playback_volume (volumeElem, + SND_MIXER_SCHN_FRONT_RIGHT, + vol); + } + else if (!snd_mixer_selem_is_playback_mono (volumeElem)) + snd_mixer_selem_set_playback_volume (volumeElem, + SND_MIXER_SCHN_FRONT_RIGHT, + [volR intValue]); + } + else + { + snd_mixer_selem_set_playback_volume (volumeElem, + SND_MIXER_SCHN_FRONT_LEFT, + 0); + if (!snd_mixer_selem_is_playback_mono (volumeElem)) + snd_mixer_selem_set_playback_volume (volumeElem, + SND_MIXER_SCHN_FRONT_RIGHT, + 0); + } + } + + if (bassElem) + { + if (![bassMute state]) + { + vol = [bassL intValue]; + snd_mixer_selem_set_playback_volume (bassElem, + SND_MIXER_SCHN_FRONT_LEFT, + vol); + if ([bassLock state]) + { + [bassR setIntValue: vol]; + if (!snd_mixer_selem_is_playback_mono (bassElem)) + snd_mixer_selem_set_playback_volume (bassElem, + SND_MIXER_SCHN_FRONT_RIGHT, + vol); + } + else if (!snd_mixer_selem_is_playback_mono (bassElem)) + snd_mixer_selem_set_playback_volume (bassElem, + SND_MIXER_SCHN_FRONT_RIGHT, + [bassR intValue]); + } + else + { + snd_mixer_selem_set_playback_volume (bassElem, + SND_MIXER_SCHN_FRONT_LEFT, + 0); + if (!snd_mixer_selem_is_playback_mono (bassElem)) + snd_mixer_selem_set_playback_volume (bassElem, + SND_MIXER_SCHN_FRONT_RIGHT, + 0); + } + } + + if (trebleElem) + { + if (![trebleMute state]) + { + vol = [trebleL intValue]; + snd_mixer_selem_set_playback_volume (trebleElem, + SND_MIXER_SCHN_FRONT_LEFT, + vol); + if ([trebleLock state]) + { + [trebleR setIntValue: vol]; + if (!snd_mixer_selem_is_playback_mono (trebleElem)) + snd_mixer_selem_set_playback_volume (trebleElem, + SND_MIXER_SCHN_FRONT_RIGHT, + vol); + } + else if (!snd_mixer_selem_is_playback_mono (trebleElem)) + snd_mixer_selem_set_playback_volume (trebleElem, + SND_MIXER_SCHN_FRONT_RIGHT, + [trebleR intValue]); + } + else + { + snd_mixer_selem_set_playback_volume (trebleElem, + SND_MIXER_SCHN_FRONT_LEFT, + 0); + if (!snd_mixer_selem_is_playback_mono (trebleElem)) + snd_mixer_selem_set_playback_volume (trebleElem, + SND_MIXER_SCHN_FRONT_RIGHT, + 0); + } + } + + if (pcmElem) + { + if (![pcmMute state]) + { + vol = [pcmL intValue]; + snd_mixer_selem_set_playback_volume (pcmElem, + SND_MIXER_SCHN_FRONT_LEFT, + vol); + if ([pcmLock state]) + { + [pcmR setIntValue: vol]; + if (!snd_mixer_selem_is_playback_mono (pcmElem)) + snd_mixer_selem_set_playback_volume (pcmElem, + SND_MIXER_SCHN_FRONT_RIGHT, + vol); + } + else if (!snd_mixer_selem_is_playback_mono (pcmElem)) + snd_mixer_selem_set_playback_volume (pcmElem, + SND_MIXER_SCHN_FRONT_RIGHT, + [pcmR intValue]); + } + else + { + snd_mixer_selem_set_playback_volume (pcmElem, + SND_MIXER_SCHN_FRONT_LEFT, + 0); + if (!snd_mixer_selem_is_playback_mono (pcmElem)) + snd_mixer_selem_set_playback_volume (pcmElem, + SND_MIXER_SCHN_FRONT_RIGHT, + 0); + } + } + + if (lineElem) + { + if (![lineMute state]) + { + vol = [lineL intValue]; + snd_mixer_selem_set_playback_volume (lineElem, + SND_MIXER_SCHN_FRONT_LEFT, + vol); + if ([lineLock state]) + { + [lineR setIntValue: vol]; + if (!snd_mixer_selem_is_playback_mono (lineElem)) + snd_mixer_selem_set_playback_volume (lineElem, + SND_MIXER_SCHN_FRONT_RIGHT, + vol); + } + else if (!snd_mixer_selem_is_playback_mono (lineElem)) + snd_mixer_selem_set_playback_volume (lineElem, + SND_MIXER_SCHN_FRONT_RIGHT, + [lineR intValue]); + } + else + { + snd_mixer_selem_set_playback_volume (lineElem, + SND_MIXER_SCHN_FRONT_LEFT, + 0); + if (!snd_mixer_selem_is_playback_mono (lineElem)) + snd_mixer_selem_set_playback_volume (lineElem, + SND_MIXER_SCHN_FRONT_RIGHT, + 0); + } + } +#else int vol,vol2,vol3,vol4,vol5; /* @@ -123,6 +653,7 @@ ioctl(mixer_fd,MIXER_WRITE(SOUND_MIXER_LINE),&vol5); close(mixer_fd); +#endif } @end diff -Nru volumecontrol.app-0.5/debian/changelog volumecontrol.app-0.6/debian/changelog --- volumecontrol.app-0.5/debian/changelog 2016-09-01 21:12:44.000000000 +0000 +++ volumecontrol.app-0.6/debian/changelog 2017-01-20 02:30:26.000000000 +0000 @@ -1,14 +1,21 @@ -volumecontrol.app (0.5-4build2) yakkety; urgency=medium +volumecontrol.app (0.6-1) unstable; urgency=medium - * No-change rebuild for gnustep-gui 0.25 + [ Gürkan Myczko ] + * Team upload. + * Update my name. + * New upstream version. + * Drop debian/VolumeControl.1 + * Drop debian/patches, accepted upstream. + * Bump standars version to 3.9.8. + * Update debian/copyright source URL. + + [ Axel Beckert ] + * Update years in debian/copyright. + * Switch Vcs-* headers to https:// and cgit. + * Add Homepage header. + * Enable all hardening build flags. - -- Matthias Klose Thu, 01 Sep 2016 21:12:44 +0000 - -volumecontrol.app (0.5-4build1) utopic; urgency=medium - - * Rebuild against libgnustep-gui0.24. - - -- Colin Watson Thu, 28 Aug 2014 11:22:14 -0700 + -- Gürkan Myczko Fri, 20 Jan 2017 03:30:26 +0100 volumecontrol.app (0.5-4) unstable; urgency=medium diff -Nru volumecontrol.app-0.5/debian/control volumecontrol.app-0.6/debian/control --- volumecontrol.app-0.5/debian/control 2014-07-11 19:04:22.000000000 +0000 +++ volumecontrol.app-0.6/debian/control 2017-01-20 02:30:26.000000000 +0000 @@ -8,9 +8,10 @@ libasound2-dev [linux-any], gnustep-make (>= 2.6.6-2), imagemagick -Standards-Version: 3.9.5 -Vcs-Git: git://anonscm.debian.org/pkg-gnustep/volumecontrol.app.git -Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-gnustep/volumecontrol.app.git +Standards-Version: 3.9.8 +Vcs-Git: https://anonscm.debian.org/git/pkg-gnustep/volumecontrol.app.git +Vcs-Browser: https://anonscm.debian.org/cgit/pkg-gnustep/volumecontrol.app.git +Homepage: https://github.com/alexmyczko/VolumeControl.app Package: volumecontrol.app Architecture: any diff -Nru volumecontrol.app-0.5/debian/copyright volumecontrol.app-0.6/debian/copyright --- volumecontrol.app-0.5/debian/copyright 2014-08-01 13:16:47.000000000 +0000 +++ volumecontrol.app-0.6/debian/copyright 2017-01-20 02:30:26.000000000 +0000 @@ -1,10 +1,9 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: VolumeControl -Source: http://www.linuks.mine.nu/volumecontrol/ - The source is no longer available. +Source: https://github.com/alexmyczko/VolumeControl.app Files: * -Copyright: 2004-2005 Gürkan Sengün +Copyright: 2004-2016 Gürkan Myczko License: GPL-2 This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,7 +22,7 @@ License version 2 can be found in `/usr/share/common-licenses/GPL-2'. Files: debian/* -Copyright: 2004-2014 Debian GNUstep maintainers +Copyright: 2004-2016 Debian GNUstep maintainers License: GPL-2+ This package is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff -Nru volumecontrol.app-0.5/debian/manpages volumecontrol.app-0.6/debian/manpages --- volumecontrol.app-0.5/debian/manpages 2014-06-22 10:00:57.000000000 +0000 +++ volumecontrol.app-0.6/debian/manpages 2017-01-20 02:30:26.000000000 +0000 @@ -1 +1 @@ -debian/VolumeControl.1 +VolumeControl.1 diff -Nru volumecontrol.app-0.5/debian/patches/alsa.patch volumecontrol.app-0.6/debian/patches/alsa.patch --- volumecontrol.app-0.5/debian/patches/alsa.patch 2014-06-22 12:44:26.000000000 +0000 +++ volumecontrol.app-0.6/debian/patches/alsa.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,588 +0,0 @@ -Description: Port to ALSA, makes the package usable on GNU/Linux. -Author: Yavor Doganov -Bug-Debian: http://bugs.debian.org/730652 -Forwarded: no -Last-Update: 2014-06-22 ---- - ---- volumecontrol.app.orig/AppController.m -+++ volumecontrol.app/AppController.m -@@ -8,15 +8,375 @@ - #include - #include - -+#ifdef __linux__ -+#include -+ -+static snd_mixer_t *handle; -+static snd_mixer_elem_t *volumeElem; -+static snd_mixer_elem_t *bassElem; -+static snd_mixer_elem_t *trebleElem; -+static snd_mixer_elem_t *pcmElem; -+static snd_mixer_elem_t *lineElem; -+static BOOL mixerOpened = NO; -+ -+/* The "default" device seems to be managed by pulseaudio these days -+ (at least on most desktops), so stick to the real one. This -+ doesn't cope well with multiple cards, but we have a hardcoded GUI -+ anyway so that is the last problem. */ -+#define DEVICE_NAME "hw:0" -+ -+/* Convenience macro to die in informational manner. */ -+#define DIE(msg) \ -+ { \ -+ NSRunCriticalAlertPanel (@"Error", \ -+ msg @"\nThe application will terminate.", \ -+ @"OK", nil, nil); \ -+ exit (EXIT_FAILURE); \ -+ } -+#else - #define DEVICE_NAME "/dev/mixer" - int mixer_fd; - static int ovol,ovol2,ovol3,ovol4,ovol5; -+#endif - - @implementation AppController -+#ifdef __linux__ -+- (void) refresh -+{ -+ int poll_count, fill_count; -+ long lvol, lvol_r; -+ struct pollfd *polls; -+ unsigned short revents; -+ -+ poll_count = snd_mixer_poll_descriptors_count (handle); -+ if (poll_count <= 0) -+ DIE (@"Cannot obtain mixer poll descriptors."); -+ -+ polls = alloca ((poll_count + 1) * sizeof (struct pollfd)); -+ fill_count = snd_mixer_poll_descriptors (handle, polls, poll_count); -+ NSAssert (poll_count = fill_count, @"poll counts differ"); -+ -+ poll (polls, fill_count + 1, 5); -+ -+ /* Ensure that changes made via other programs (alsamixer, etc.) get -+ reflected as well. */ -+ snd_mixer_poll_descriptors_revents (handle, polls, poll_count, &revents); -+ if (revents & POLLIN) -+ snd_mixer_handle_events (handle); -+ -+ if (volumeElem) -+ { -+ snd_mixer_selem_get_playback_volume (volumeElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ [volL setIntValue: lvol]; -+ if (snd_mixer_selem_is_playback_mono (volumeElem)) -+ [volR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (volumeElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [volR setIntValue: lvol_r]; -+ } -+ } -+ -+ if (bassElem) -+ { -+ snd_mixer_selem_get_playback_volume (bassElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ [bassL setIntValue: lvol]; -+ if (snd_mixer_selem_is_playback_mono (bassElem)) -+ [bassR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (bassElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [bassR setIntValue: lvol_r]; -+ } -+ } -+ -+ if (trebleElem) -+ { -+ snd_mixer_selem_get_playback_volume (trebleElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ [trebleL setIntValue: lvol]; -+ if (snd_mixer_selem_is_playback_mono (trebleElem)) -+ [trebleR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (trebleElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [trebleR setIntValue: lvol_r]; -+ } -+ } -+ -+ if (pcmElem) -+ { -+ snd_mixer_selem_get_playback_volume (pcmElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ [pcmL setIntValue: lvol]; -+ if (snd_mixer_selem_is_playback_mono (pcmElem)) -+ [pcmR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (pcmElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [pcmR setIntValue: lvol_r]; -+ } -+ } -+ -+ if (lineElem) -+ { -+ snd_mixer_selem_get_playback_volume (lineElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ [lineL setIntValue: lvol]; -+ if (snd_mixer_selem_is_playback_mono (lineElem)) -+ [lineR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (lineElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [lineR setIntValue: lvol_r]; -+ } -+ } -+} -+ -+- (void) openMixer -+{ -+ if (snd_mixer_open (&handle, 0) < 0) -+ DIE (@"Cannot open mixer."); -+ if (snd_mixer_attach (handle, DEVICE_NAME) < 0) -+ DIE (@"Cannot attach mixer."); -+ if (snd_mixer_selem_register (handle, NULL, NULL) < 0) -+ DIE (@"Cannot register the mixer elements."); -+ if (snd_mixer_load (handle) < 0) -+ DIE (@"Cannot load mixer."); -+ -+ [NSTimer scheduledTimerWithTimeInterval: 0.5 -+ target: self -+ selector: @selector(refresh) -+ userInfo: nil -+ repeats: YES]; -+ [NSApp setDelegate: self]; -+ mixerOpened = YES; -+} -+ -+- (void) controlNotAvailable: (id) sender -+{ -+ NSRunInformationalAlertPanel (@"Control missing", -+ @"It looks like the sound card does not " -+ @"have this type of control.", -+ @"OK", nil, nil); -+ [sender setIntValue: 0]; -+ [sender setEnabled: NO]; -+} -+ -+- (void) applicationWillTerminate: (NSNotification *) notification -+{ -+ snd_mixer_detach (handle, DEVICE_NAME); -+ snd_mixer_close (handle); -+} -+#endif - - - (void) awakeFromNib - { - /* read volume settings, and set buttons */ -+#ifdef __linux__ -+ snd_mixer_elem_t *elem; -+ snd_mixer_selem_id_t *sid; -+ long lvol, lvol_r, min, max; -+ -+ if (!mixerOpened) -+ [self openMixer]; -+ -+ snd_mixer_selem_id_alloca (&sid); -+ -+ for (elem = snd_mixer_first_elem (handle); elem; -+ elem = snd_mixer_elem_next (elem)) -+ { -+ if (snd_mixer_selem_is_active (elem) -+ && snd_mixer_selem_has_playback_volume (elem)) -+ { -+ /* Because our controls are hardcoded in the .gorm file we -+ can't construct the UI on the fly based on the -+ available elements, as it should be done normally. So -+ resort to dumb parsing in the hope that the names of -+ the elements match ours. This is far from ideal; the -+ master element may be called "Front", for example. */ -+ snd_mixer_selem_get_id (elem, sid); -+ if (!strcmp (snd_mixer_selem_id_get_name (sid), "Master")) -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ snd_mixer_selem_get_playback_volume_range (elem, &min, &max); -+ [volL setMinValue: min]; -+ [volL setMaxValue: max]; -+ [volL setIntValue: lvol]; -+ [volR setMinValue: min]; -+ [volR setMaxValue: max]; -+ if (snd_mixer_selem_is_playback_mono (elem)) -+ [volR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [volR setIntValue: lvol_r]; -+ } -+ -+ volumeElem = elem; -+ } -+ -+ /* It seems that most cards do not have bass/treble -+ controls. Oh well. */ -+ if (!strcmp (snd_mixer_selem_id_get_name (sid), "Bass")) -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ snd_mixer_selem_get_playback_volume_range (elem, &min, &max); -+ [bassL setMinValue: min]; -+ [bassL setMaxValue: max]; -+ [bassL setIntValue: lvol]; -+ [bassR setMinValue: min]; -+ [bassR setMaxValue: max]; -+ -+ if (snd_mixer_selem_is_playback_mono (elem)) -+ [bassR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [bassR setIntValue: lvol_r]; -+ } -+ -+ bassElem = elem; -+ } -+ -+ if (!strcmp (snd_mixer_selem_id_get_name (sid), "Treble")) -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ snd_mixer_selem_get_playback_volume_range (elem, &min, &max); -+ [trebleL setMinValue: min]; -+ [trebleL setMaxValue: max]; -+ [trebleL setIntValue: lvol]; -+ [trebleR setMinValue: min]; -+ [trebleR setMaxValue: max]; -+ -+ if (snd_mixer_selem_is_playback_mono (elem)) -+ [trebleR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [trebleR setIntValue: lvol_r]; -+ } -+ -+ trebleElem = elem; -+ } -+ -+ if (!strcmp (snd_mixer_selem_id_get_name (sid), "PCM")) -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ snd_mixer_selem_get_playback_volume_range (elem, &min, &max); -+ [pcmL setMinValue: min]; -+ [pcmL setMaxValue: max]; -+ [pcmL setIntValue: lvol]; -+ [pcmR setMinValue: min]; -+ [pcmR setMaxValue: max]; -+ if (snd_mixer_selem_is_playback_mono (elem)) -+ [pcmR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [pcmR setIntValue: lvol_r]; -+ } -+ -+ pcmElem = elem; -+ } -+ -+ if (!strcmp (snd_mixer_selem_id_get_name (sid), "Line")) -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ &lvol); -+ snd_mixer_selem_get_playback_volume_range (elem, &min, &max); -+ [lineL setMinValue: min]; -+ [lineL setMaxValue: max]; -+ [lineL setIntValue: lvol]; -+ [lineR setMinValue: min]; -+ [lineR setMaxValue: max]; -+ -+ if (snd_mixer_selem_is_playback_mono (elem)) -+ [lineR setIntValue: lvol]; -+ else -+ { -+ snd_mixer_selem_get_playback_volume (elem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ &lvol_r); -+ [lineR setIntValue: lvol_r]; -+ } -+ -+ lineElem = elem; -+ } -+ } -+ } -+ -+ /* Disable controls that are beyond our control. */ -+ if (!volumeElem) /* <= Could happen in practice... */ -+ { -+ [volL setAction: @selector(controlNotAvailable:)]; -+ [volR setEnabled: NO]; -+ [volMute setEnabled: NO]; -+ [volLock setEnabled: NO]; -+ } -+ if (!bassElem) -+ { -+ [bassL setAction: @selector(controlNotAvailable:)]; -+ [bassR setEnabled: NO]; -+ [bassMute setEnabled: NO]; -+ [bassLock setEnabled: NO]; -+ } -+ if (!trebleElem) -+ { -+ [trebleL setAction: @selector(controlNotAvailable:)]; -+ [trebleR setEnabled: NO]; -+ [trebleMute setEnabled: NO]; -+ [trebleLock setEnabled: NO]; -+ } -+ if (!pcmElem) -+ { -+ [pcmL setAction: @selector(controlNotAvailable:)]; -+ [pcmR setEnabled: NO]; -+ [pcmMute setEnabled: NO]; -+ [pcmLock setEnabled: NO]; -+ } -+ if (!lineElem) -+ { -+ [lineL setAction: @selector(controlNotAvailable:)]; -+ [lineR setEnabled: NO]; -+ [lineMute setEnabled: NO]; -+ [lineLock setEnabled: NO]; -+ } -+#else - int vol; - - if ((mixer_fd=open(DEVICE_NAME, O_RDONLY | O_NONBLOCK, 0)) == -1) { -@@ -47,11 +407,180 @@ - - timer=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self \ - selector:@selector(awakeFromNib) userInfo:nil repeats:NO ]; -+#endif - } - - - (void) setVolume: (id)sender - { - /* set volume according to the buttons */ -+#ifdef __linux__ -+ long vol; -+ -+ if (volumeElem) -+ { -+ if (![volMute state]) -+ { -+ vol = [volL intValue]; -+ snd_mixer_selem_set_playback_volume (volumeElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ vol); -+ if ([volLock state]) -+ { -+ [volR setIntValue: vol]; -+ if (!snd_mixer_selem_is_playback_mono (volumeElem)) -+ snd_mixer_selem_set_playback_volume (volumeElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ vol); -+ } -+ else if (!snd_mixer_selem_is_playback_mono (volumeElem)) -+ snd_mixer_selem_set_playback_volume (volumeElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ [volR intValue]); -+ } -+ else -+ { -+ snd_mixer_selem_set_playback_volume (volumeElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ 0); -+ if (!snd_mixer_selem_is_playback_mono (volumeElem)) -+ snd_mixer_selem_set_playback_volume (volumeElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ 0); -+ } -+ } -+ -+ if (bassElem) -+ { -+ if (![bassMute state]) -+ { -+ vol = [bassL intValue]; -+ snd_mixer_selem_set_playback_volume (bassElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ vol); -+ if ([bassLock state]) -+ { -+ [bassR setIntValue: vol]; -+ if (!snd_mixer_selem_is_playback_mono (bassElem)) -+ snd_mixer_selem_set_playback_volume (bassElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ vol); -+ } -+ else if (!snd_mixer_selem_is_playback_mono (bassElem)) -+ snd_mixer_selem_set_playback_volume (bassElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ [bassR intValue]); -+ } -+ else -+ { -+ snd_mixer_selem_set_playback_volume (bassElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ 0); -+ if (!snd_mixer_selem_is_playback_mono (bassElem)) -+ snd_mixer_selem_set_playback_volume (bassElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ 0); -+ } -+ } -+ -+ if (trebleElem) -+ { -+ if (![trebleMute state]) -+ { -+ vol = [trebleL intValue]; -+ snd_mixer_selem_set_playback_volume (trebleElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ vol); -+ if ([trebleLock state]) -+ { -+ [trebleR setIntValue: vol]; -+ if (!snd_mixer_selem_is_playback_mono (trebleElem)) -+ snd_mixer_selem_set_playback_volume (trebleElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ vol); -+ } -+ else if (!snd_mixer_selem_is_playback_mono (trebleElem)) -+ snd_mixer_selem_set_playback_volume (trebleElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ [trebleR intValue]); -+ } -+ else -+ { -+ snd_mixer_selem_set_playback_volume (trebleElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ 0); -+ if (!snd_mixer_selem_is_playback_mono (trebleElem)) -+ snd_mixer_selem_set_playback_volume (trebleElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ 0); -+ } -+ } -+ -+ if (pcmElem) -+ { -+ if (![pcmMute state]) -+ { -+ vol = [pcmL intValue]; -+ snd_mixer_selem_set_playback_volume (pcmElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ vol); -+ if ([pcmLock state]) -+ { -+ [pcmR setIntValue: vol]; -+ if (!snd_mixer_selem_is_playback_mono (pcmElem)) -+ snd_mixer_selem_set_playback_volume (pcmElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ vol); -+ } -+ else if (!snd_mixer_selem_is_playback_mono (pcmElem)) -+ snd_mixer_selem_set_playback_volume (pcmElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ [pcmR intValue]); -+ } -+ else -+ { -+ snd_mixer_selem_set_playback_volume (pcmElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ 0); -+ if (!snd_mixer_selem_is_playback_mono (pcmElem)) -+ snd_mixer_selem_set_playback_volume (pcmElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ 0); -+ } -+ } -+ -+ if (lineElem) -+ { -+ if (![lineMute state]) -+ { -+ vol = [lineL intValue]; -+ snd_mixer_selem_set_playback_volume (lineElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ vol); -+ if ([lineLock state]) -+ { -+ [lineR setIntValue: vol]; -+ if (!snd_mixer_selem_is_playback_mono (lineElem)) -+ snd_mixer_selem_set_playback_volume (lineElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ vol); -+ } -+ else if (!snd_mixer_selem_is_playback_mono (lineElem)) -+ snd_mixer_selem_set_playback_volume (lineElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ [lineR intValue]); -+ } -+ else -+ { -+ snd_mixer_selem_set_playback_volume (lineElem, -+ SND_MIXER_SCHN_FRONT_LEFT, -+ 0); -+ if (!snd_mixer_selem_is_playback_mono (lineElem)) -+ snd_mixer_selem_set_playback_volume (lineElem, -+ SND_MIXER_SCHN_FRONT_RIGHT, -+ 0); -+ } -+ } -+#else - int vol,vol2,vol3,vol4,vol5; - - /* -@@ -124,6 +653,7 @@ - ioctl(mixer_fd,MIXER_WRITE(SOUND_MIXER_LINE),&vol5); - - close(mixer_fd); -+#endif - } - - @end ---- volumecontrol.app.orig/GNUmakefile -+++ volumecontrol.app/GNUmakefile -@@ -9,5 +9,11 @@ - VolumeControl_OBJC_FILES = main.m AppController.m - VolumeControl_RESOURCE_FILES = VolumeControl.gorm headphones.tiff VolumeControl.rtf - -+# GNUSTEP_TARGET_OS is defined to `linux-gnueabi' on armel and -+# `linux-gnuspe' on powerpcspe. -+ifneq (,$(findstring linux-gnu,$(GNUSTEP_TARGET_OS))) -+ADDITIONAL_GUI_LIBS = -lasound -+endif -+ - include $(GNUSTEP_MAKEFILES)/application.make - diff -Nru volumecontrol.app-0.5/debian/patches/fix-implicit-declaration.patch volumecontrol.app-0.6/debian/patches/fix-implicit-declaration.patch --- volumecontrol.app-0.5/debian/patches/fix-implicit-declaration.patch 2014-06-22 11:00:22.000000000 +0000 +++ volumecontrol.app-0.6/debian/patches/fix-implicit-declaration.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -Description: Fix implicit function declaration of `close'. -Author: Yavor Doganov -Forwarded: no -Last-Update: 2014-06-22 ---- - ---- volumecontrol.app.orig/AppController.m -+++ volumecontrol.app/AppController.m -@@ -6,6 +6,7 @@ - #include - #include /* control device */ - #include -+#include - - #define DEVICE_NAME "/dev/mixer" - int mixer_fd; diff -Nru volumecontrol.app-0.5/debian/patches/fix-main-function.patch volumecontrol.app-0.6/debian/patches/fix-main-function.patch --- volumecontrol.app-0.5/debian/patches/fix-main-function.patch 2014-06-22 10:52:43.000000000 +0000 +++ volumecontrol.app-0.6/debian/patches/fix-main-function.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -Description: Fix initialization problem with gnustep-gui >= 0.20. -Author: Yavor Doganov -Bug-Debian: http://bugs.debian.org/645935 -Forwarded: no -Last-Update: 2011-11-10 ---- - ---- volumecontrol.app-0.5.orig/AppController.m -+++ volumecontrol.app-0.5/AppController.m -@@ -3,7 +3,7 @@ - #include - #include "AppController.h" - --#include -+#include - #include /* control device */ - #include - ---- volumecontrol.app-0.5.orig/main.m -+++ volumecontrol.app-0.5/main.m -@@ -1,10 +1,6 @@ - #include - --int main(int argc, char **argv) -+int main(int argc, const char **argv) - { -- CREATE_AUTORELEASE_POOL(pool); -- [NSApplication sharedApplication]; -- [NSApp run]; -- DESTROY(pool); -- return 0; -+ return NSApplicationMain(argc, argv); - } diff -Nru volumecontrol.app-0.5/debian/patches/series volumecontrol.app-0.6/debian/patches/series --- volumecontrol.app-0.5/debian/patches/series 2014-06-22 11:31:18.000000000 +0000 +++ volumecontrol.app-0.6/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -fix-main-function.patch -fix-implicit-declaration.patch -alsa.patch diff -Nru volumecontrol.app-0.5/debian/rules volumecontrol.app-0.6/debian/rules --- volumecontrol.app-0.5/debian/rules 2014-07-11 19:05:53.000000000 +0000 +++ volumecontrol.app-0.6/debian/rules 2017-01-20 02:30:26.000000000 +0000 @@ -10,6 +10,8 @@ optim := debug=yes endif +export DEB_BUILD_MAINT_OPTIONS=hardening=+all + %: dh $@ diff -Nru volumecontrol.app-0.5/debian/VolumeControl.1 volumecontrol.app-0.6/debian/VolumeControl.1 --- volumecontrol.app-0.5/debian/VolumeControl.1 2014-06-22 11:39:10.000000000 +0000 +++ volumecontrol.app-0.6/debian/VolumeControl.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -.TH VOLUMECONTROL 1 "July 29, 2004" -.SH NAME -VolumeControl \- audio mixer for GNUstep -.SH SYNOPSIS -.B VolumeControl -.SH DESCRIPTION -This manual page documents briefly the -.B VolumeControl -command. -This manual page was written for the Debian distribution -because the original program does not have a manual page. -.PP -\fBVolumeControl\fP is a GNUstep program for adjusting the audio mixer -on systems that use the ALSA or OSS APIs. It allows the sound level, -left/right speakers, muting for master, PCM, bass, and treble levels -to be controlled. -.SH SEE ALSO -.BR GNUstep (7). -.br -.SH AUTHOR -This manual page was written by G\[:u]rkan Seng\[:u]n , -for the Debian project (but may be used by others). diff -Nru volumecontrol.app-0.5/GNUmakefile volumecontrol.app-0.6/GNUmakefile --- volumecontrol.app-0.5/GNUmakefile 2005-07-31 16:41:11.000000000 +0000 +++ volumecontrol.app-0.6/GNUmakefile 2017-01-11 13:51:16.000000000 +0000 @@ -9,5 +9,11 @@ VolumeControl_OBJC_FILES = main.m AppController.m VolumeControl_RESOURCE_FILES = VolumeControl.gorm headphones.tiff VolumeControl.rtf +# GNUSTEP_TARGET_OS is defined to `linux-gnueabi' on armel and +# `linux-gnuspe' on powerpcspe. +ifneq (,$(findstring linux-gnu,$(GNUSTEP_TARGET_OS))) +ADDITIONAL_GUI_LIBS = -lasound +endif + include $(GNUSTEP_MAKEFILES)/application.make diff -Nru volumecontrol.app-0.5/main.m volumecontrol.app-0.6/main.m --- volumecontrol.app-0.5/main.m 2004-07-13 07:50:54.000000000 +0000 +++ volumecontrol.app-0.6/main.m 2017-01-11 13:51:16.000000000 +0000 @@ -1,10 +1,6 @@ #include -int main(int argc, char **argv) +int main(int argc, const char **argv) { - CREATE_AUTORELEASE_POOL(pool); - [NSApplication sharedApplication]; - [NSApp run]; - DESTROY(pool); - return 0; + return NSApplicationMain(argc, argv); } diff -Nru volumecontrol.app-0.5/README.md volumecontrol.app-0.6/README.md --- volumecontrol.app-0.5/README.md 1970-01-01 00:00:00.000000000 +0000 +++ volumecontrol.app-0.6/README.md 2017-01-11 13:51:16.000000000 +0000 @@ -0,0 +1,2 @@ +# VolumeControl.app +GNUstep VolumeControl diff -Nru volumecontrol.app-0.5/VolumeControl.1 volumecontrol.app-0.6/VolumeControl.1 --- volumecontrol.app-0.5/VolumeControl.1 1970-01-01 00:00:00.000000000 +0000 +++ volumecontrol.app-0.6/VolumeControl.1 2017-01-11 13:51:16.000000000 +0000 @@ -0,0 +1,22 @@ +.TH VOLUMECONTROL 1 "July 29, 2004" +.SH NAME +VolumeControl \- audio mixer for GNUstep +.SH SYNOPSIS +.B VolumeControl +.SH DESCRIPTION +This manual page documents briefly the +.B VolumeControl +command. +This manual page was written for the Debian distribution +because the original program does not have a manual page. +.PP +\fBVolumeControl\fP is a GNUstep program for adjusting the audio mixer +on systems that use the ALSA or OSS APIs. It allows the sound level, +left/right speakers, muting for master, PCM, bass, and treble levels +to be controlled. +.SH SEE ALSO +.BR GNUstep (7). +.br +.SH AUTHOR +This manual page was written by G\[:u]rkan Myczko , +for the Debian project (but may be used by others). diff -Nru volumecontrol.app-0.5/VolumeControlInfo.plist volumecontrol.app-0.6/VolumeControlInfo.plist --- volumecontrol.app-0.5/VolumeControlInfo.plist 2005-07-31 15:43:42.000000000 +0000 +++ volumecontrol.app-0.6/VolumeControlInfo.plist 2017-01-11 13:51:16.000000000 +0000 @@ -1,8 +1,8 @@ { ApplicationDescription = "Control your volume settings"; - ApplicationRelease = "0.5"; - Authors = ("G\u00fcrkan Seng\u00fcn "); - Copyright = "Copyright 2004, 2005 G\u00fcrkan Seng\u00fcn"; + ApplicationRelease = "0.6"; + Authors = ("G\u00fcrkan Myczko "); + Copyright = "Copyright 2004, 2005, 2017 G\u00fcrkan Myczko"; CopyrightDescription = "GNU General Public License"; - URL = "http://www.linuks.mine.nu/volumecontrol/"; + URL = "http://github.com/alexmyczko/VolumeControl.app/"; } diff -Nru volumecontrol.app-0.5/VolumeControl.rtf volumecontrol.app-0.6/VolumeControl.rtf --- volumecontrol.app-0.5/VolumeControl.rtf 2005-07-31 15:36:20.000000000 +0000 +++ volumecontrol.app-0.6/VolumeControl.rtf 2017-01-11 13:51:16.000000000 +0000 @@ -5,6 +5,6 @@ \par Portability: Linux, FreeBSD\par \par -http://www.linuks.mine.nu/volumecontrol/\par -G\'FCrkan Seng\'FCn \par +http://github.com/alexmyczko/VolumeControl.app\par +G\'FCrkan Myczko \par } \ No newline at end of file