mirror of
https://github.com/alsa-project/alsa-tools.git
synced 2026-02-20 01:40:15 -05:00
hdspmixer: add output loopback buttons
This patch adds "LPBK" buttons to the output strip
channels allowing to toggle the hardware output
loopback state.
Efforts were made to hide the buttons for not yet
enabled devices but due to difficulties in implementation
was cancelled for the time being. Should it be a no-go
efforts should be made to fix this and hide them,
although I would think fixing the driver for other
devices would be an effort with much more merit.
This is currently only enabled for HDSP9632 devices
with following driver patch:
da2a040ee7
We check whether the system has the kernel patch
applied by calling `HDSPMixerCard::supportsLoopback()`
and if not these buttons remain gray (off) and do
nothing when clicked.
Signed-off-by: Jasmin Fazlic <superfassl@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
c0e69055fa
commit
3e4fd7dffb
19 changed files with 931 additions and 438 deletions
69
hdspmixer/pixmaps/loopback.xpm
Normal file
69
hdspmixer/pixmaps/loopback.xpm
Normal file
|
|
@ -0,0 +1,69 @@
|
||||||
|
/* XPM */
|
||||||
|
char const * loopback_xpm[] = {
|
||||||
|
"34 15 51 1",
|
||||||
|
" c None",
|
||||||
|
". c #2E3038",
|
||||||
|
"+ c #FFFB7C",
|
||||||
|
"@ c #FDF97B",
|
||||||
|
"# c #2E2D11",
|
||||||
|
"$ c #000000",
|
||||||
|
"% c #383716",
|
||||||
|
"& c #898740",
|
||||||
|
"* c #F1EE75",
|
||||||
|
"= c #22210A",
|
||||||
|
"- c #727034",
|
||||||
|
"; c #E2DE6D",
|
||||||
|
"> c #D5D267",
|
||||||
|
", c #787637",
|
||||||
|
"' c #FBF77A",
|
||||||
|
") c #AAA750",
|
||||||
|
"! c #ABA851",
|
||||||
|
"~ c #CDC962",
|
||||||
|
"{ c #83813C",
|
||||||
|
"] c #C8C560",
|
||||||
|
"^ c #84823D",
|
||||||
|
"/ c #F7F378",
|
||||||
|
"( c #949145",
|
||||||
|
"_ c #B7B457",
|
||||||
|
": c #949245",
|
||||||
|
"< c #353414",
|
||||||
|
"[ c #87853F",
|
||||||
|
"} c #F1ED75",
|
||||||
|
"| c #3B3A17",
|
||||||
|
"1 c #DFDB6C",
|
||||||
|
"2 c #161505",
|
||||||
|
"3 c #4B4A20",
|
||||||
|
"4 c #E5E16E",
|
||||||
|
"5 c #FEFA7C",
|
||||||
|
"6 c #E8E470",
|
||||||
|
"7 c #535124",
|
||||||
|
"8 c #FAF679",
|
||||||
|
"9 c #E7E370",
|
||||||
|
"0 c #66642E",
|
||||||
|
"a c #E4E06E",
|
||||||
|
"b c #F6F277",
|
||||||
|
"c c #EAE671",
|
||||||
|
"d c #E0DC6C",
|
||||||
|
"e c #B9B658",
|
||||||
|
"f c #5F5D2A",
|
||||||
|
"g c #EDE973",
|
||||||
|
"h c #69672F",
|
||||||
|
"i c #DDD96A",
|
||||||
|
"j c #333342",
|
||||||
|
"k c #32323E",
|
||||||
|
"l c #313136",
|
||||||
|
"..................................",
|
||||||
|
".++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++.",
|
||||||
|
".+++@#++++@$$%&*@$$=-;+@#++>,*+++.",
|
||||||
|
".+++@#++++@#+')!@#+@~{+@#+]^/++++.",
|
||||||
|
".+++@#++++@#+'!!@#+@~(+@#_:'+++++.",
|
||||||
|
".+++@#++++@$$<[}@$$$|1+@234++++++.",
|
||||||
|
".+++@#++++@#++++@#+5678@#90a+++++.",
|
||||||
|
".+++@#++++@#++++@#+59#b@#+c0d++++.",
|
||||||
|
".+++@$$$$e@#++++@$$2f]+@#++ghi+++.",
|
||||||
|
".++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++.",
|
||||||
|
"..jklllllllllkj....jklllllllllkj.."};
|
||||||
|
|
@ -1,220 +1,282 @@
|
||||||
/* XPM */
|
/* XPM */
|
||||||
char const * output_xpm[] = {
|
char const * output_xpm[] = {
|
||||||
"36 208 9 1",
|
"36 224 55 1",
|
||||||
" c #595966",
|
" c None",
|
||||||
". c #2E3038",
|
". c #595966",
|
||||||
"+ c #000000",
|
"+ c #2E3038",
|
||||||
"@ c #474951",
|
"@ c #000000",
|
||||||
"# c #404044",
|
"# c #474951",
|
||||||
"$ c #7A7A8F",
|
"$ c #404044",
|
||||||
"% c #27272B",
|
"% c #7A7A8F",
|
||||||
"& c #616176",
|
"& c #27272B",
|
||||||
"* c #737384",
|
"* c #616176",
|
||||||
" ",
|
"= c #737384",
|
||||||
" .................................. ",
|
"- c #757585",
|
||||||
" .................................. ",
|
"; c #D4D4D4",
|
||||||
" .................................. ",
|
"> c #D6D6D6",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
", c #D3D3D4",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"' c #C3C3C6",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
") c #848491",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"! c #D5D5D5",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"~ c #CACACB",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"{ c #93939C",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"] c #9D9DA5",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"^ c #C8C8CA",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"/ c #787888",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"( c #B6B6BA",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"_ c #A3A3AA",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
": c #C5C5C7",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"< c #A7A7AE",
|
||||||
" .................................. ",
|
"[ c #C4C4C6",
|
||||||
" .................................. ",
|
"} c #7D7D8C",
|
||||||
" .................................. ",
|
"| c #797989",
|
||||||
" .................................. ",
|
"1 c #C0C0C2",
|
||||||
" .................................. ",
|
"2 c #AFAFB4",
|
||||||
" .................................. ",
|
"3 c #BFBFC2",
|
||||||
" .................................. ",
|
"4 c #D3D3D3",
|
||||||
" .................................. ",
|
"5 c #95959F",
|
||||||
" ..................++++++++++...... ",
|
"6 c #D5D5D6",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
"7 c #D1D1D2",
|
||||||
" ........%&........++++++++++...... ",
|
"8 c #91919B",
|
||||||
" ........%&........++++++++++...... ",
|
"9 c #757586",
|
||||||
" ........%&........++++++++++...... ",
|
"0 c #8E8E99",
|
||||||
" ........%&........++++++++++...... ",
|
"a c #D1D1D1",
|
||||||
" ........%&........++++++++++...... ",
|
"b c #8F8F99",
|
||||||
" ........%&........++++++++++...... ",
|
"c c #CBCBCD",
|
||||||
" ........%&........++++++++++...... ",
|
"d c #92929C",
|
||||||
" ........%&........++++++++++...... ",
|
"e c #7F7F8D",
|
||||||
" ........%&........++++++++++...... ",
|
"f c #8C8C97",
|
||||||
" ........%&........++++++++++...... ",
|
"g c #96969F",
|
||||||
" ........%&........++++++++++...... ",
|
"h c #AFAFB5",
|
||||||
" ........%&........++++++++++...... ",
|
"i c #CECECF",
|
||||||
" ........%&........++++++++++...... ",
|
"j c #A6A6AD",
|
||||||
" ........%&........++++++++++...... ",
|
"k c #8A8A96",
|
||||||
" ........%&........++++++++++...... ",
|
"l c #CCCCCD",
|
||||||
" ........%&........++++++++++...... ",
|
"m c #9898A1",
|
||||||
" ........%&........++++++++++...... ",
|
"n c #333342",
|
||||||
" ........%&........++++++++++...... ",
|
"o c #32323E",
|
||||||
" ........%&........++++++++++...... ",
|
"p c #313136",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
"....................................",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..................++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" "};
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++++++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
"....................................",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".+================================+.",
|
||||||
|
".+================================+.",
|
||||||
|
".+================================+.",
|
||||||
|
".+===-;====->>,')->>!~{=-;==]^)===+.",
|
||||||
|
".+===-;====-;=/((-;=-_:=-;=<[}====+.",
|
||||||
|
".+===-;====-;=|((-;=-_1=-;23/=====+.",
|
||||||
|
".+===-;====->>,[)->>>45=-678======+.",
|
||||||
|
".+===-;====-;====-;=90a|-;bcd=====+.",
|
||||||
|
".+===-;====-;====-;=9b;e-;=fcg====+.",
|
||||||
|
".+===->>>>h-;====->>6ij=-;==klm===+.",
|
||||||
|
".+================================+.",
|
||||||
|
".+================================+.",
|
||||||
|
".+================================+.",
|
||||||
|
".++nopppppppppon++++nopppppppppon++.",
|
||||||
|
"...................................."};
|
||||||
|
|
|
||||||
|
|
@ -1,220 +1,282 @@
|
||||||
/* XPM */
|
/* XPM */
|
||||||
char const * output_r_xpm[] = {
|
char const * output_r_xpm[] = {
|
||||||
"36 208 9 1",
|
"36 224 55 1",
|
||||||
" c #595966",
|
" c None",
|
||||||
". c #2E3038",
|
". c #595966",
|
||||||
"+ c #000000",
|
"+ c #2E3038",
|
||||||
"@ c #474951",
|
"@ c #000000",
|
||||||
"# c #404044",
|
"# c #474951",
|
||||||
"$ c #7A7A8F",
|
"$ c #404044",
|
||||||
"% c #27272B",
|
"% c #7A7A8F",
|
||||||
"& c #616176",
|
"& c #27272B",
|
||||||
"* c #737384",
|
"* c #616176",
|
||||||
" ",
|
"= c #737384",
|
||||||
" .................................. ",
|
"- c #757585",
|
||||||
" .................................. ",
|
"; c #D4D4D4",
|
||||||
" .................................. ",
|
"> c #D6D6D6",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
", c #D3D3D4",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"' c #C3C3C6",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
") c #848491",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"! c #D5D5D5",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"~ c #CACACB",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"{ c #93939C",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"] c #9D9DA5",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"^ c #C8C8CA",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"/ c #787888",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"( c #B6B6BA",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"_ c #A3A3AA",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
": c #C5C5C7",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
"< c #A7A7AE",
|
||||||
" .................................. ",
|
"[ c #C4C4C6",
|
||||||
" .................................. ",
|
"} c #7D7D8C",
|
||||||
" .................................. ",
|
"| c #797989",
|
||||||
" .................................. ",
|
"1 c #C0C0C2",
|
||||||
" .................................. ",
|
"2 c #AFAFB4",
|
||||||
" .................................. ",
|
"3 c #BFBFC2",
|
||||||
" .................................. ",
|
"4 c #D3D3D3",
|
||||||
" .................................. ",
|
"5 c #95959F",
|
||||||
" ..................++++++++++...... ",
|
"6 c #D5D5D6",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
"7 c #D1D1D2",
|
||||||
" ........%&........++++++++++...... ",
|
"8 c #91919B",
|
||||||
" ........%&........++++++++++...... ",
|
"9 c #757586",
|
||||||
" ........%&........++++++++++...... ",
|
"0 c #8E8E99",
|
||||||
" ........%&........++++++++++...... ",
|
"a c #D1D1D1",
|
||||||
" ........%&........++++++++++...... ",
|
"b c #8F8F99",
|
||||||
" ........%&........++++++++++...... ",
|
"c c #CBCBCD",
|
||||||
" ........%&........++++++++++...... ",
|
"d c #92929C",
|
||||||
" ........%&........++++++++++...... ",
|
"e c #7F7F8D",
|
||||||
" ........%&........++++++++++...... ",
|
"f c #8C8C97",
|
||||||
" ........%&........++++++++++...... ",
|
"g c #96969F",
|
||||||
" ........%&........++++++++++...... ",
|
"h c #AFAFB5",
|
||||||
" ........%&........++++++++++...... ",
|
"i c #CECECF",
|
||||||
" ........%&........++++++++++...... ",
|
"j c #A6A6AD",
|
||||||
" ........%&........++++++++++...... ",
|
"k c #8A8A96",
|
||||||
" ........%&........++++++++++...... ",
|
"l c #CCCCCD",
|
||||||
" ........%&........++++++++++...... ",
|
"m c #9898A1",
|
||||||
" ........%&........++++++++++...... ",
|
"n c #333342",
|
||||||
" ........%&........++++++++++...... ",
|
"o c #32323E",
|
||||||
" ........%&........++++++++++...... ",
|
"p c #313136",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
"....................................",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++++++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .@@@@@@@#$@@@.....++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ........%&........++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..................++++++++++...... ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..++++++++++++++++++++++++++++++.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".+#######$%###+++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" ..******************************.. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" .................................. ",
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
" "};
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++&*++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++++++++++++@@@@@@@@@@++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++==============================++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
"....................................",
|
||||||
|
".++++++++++++++++++++++++++++++++++.",
|
||||||
|
".+================================+.",
|
||||||
|
".+================================+.",
|
||||||
|
".+================================+.",
|
||||||
|
".+===-;====->>,')->>!~{=-;==]^)===+.",
|
||||||
|
".+===-;====-;=/((-;=-_:=-;=<[}====+.",
|
||||||
|
".+===-;====-;=|((-;=-_1=-;23/=====+.",
|
||||||
|
".+===-;====->>,[)->>>45=-678======+.",
|
||||||
|
".+===-;====-;====-;=90a|-;bcd=====+.",
|
||||||
|
".+===-;====-;====-;=9b;e-;=fcg====+.",
|
||||||
|
".+===->>>>h-;====->>6ij=-;==klm===+.",
|
||||||
|
".+================================+.",
|
||||||
|
".+================================+.",
|
||||||
|
".+================================+.",
|
||||||
|
".++nopppppppppon++++nopppppppppon++.",
|
||||||
|
"...................................."};
|
||||||
|
|
|
||||||
|
|
@ -231,6 +231,8 @@ void HDSPMixerCard::adjustSettings() {
|
||||||
/* should never happen */
|
/* should never happen */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
max_channels = sizeof(channel_map_mf_ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == Digiface) {
|
if (type == Digiface) {
|
||||||
|
|
@ -253,6 +255,8 @@ void HDSPMixerCard::adjustSettings() {
|
||||||
/* should never happen */
|
/* should never happen */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
max_channels = sizeof(channel_map_df_ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == RPM) {
|
if (type == RPM) {
|
||||||
|
|
@ -263,6 +267,8 @@ void HDSPMixerCard::adjustSettings() {
|
||||||
channel_map_input = channel_map_playback = channel_map_rpm;
|
channel_map_input = channel_map_playback = channel_map_rpm;
|
||||||
dest_map = dest_map_rpm;
|
dest_map = dest_map_rpm;
|
||||||
meter_map_input = meter_map_playback = channel_map_rpm;
|
meter_map_input = meter_map_playback = channel_map_rpm;
|
||||||
|
|
||||||
|
max_channels = sizeof(channel_map_rpm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -286,6 +292,8 @@ void HDSPMixerCard::adjustSettings() {
|
||||||
/* should never happen */
|
/* should never happen */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
max_channels = sizeof(channel_map_df_ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == H9632) {
|
if (type == H9632) {
|
||||||
|
|
@ -312,6 +320,8 @@ void HDSPMixerCard::adjustSettings() {
|
||||||
meter_map_input = meter_map_playback = channel_map_h9632_qs;
|
meter_map_input = meter_map_playback = channel_map_h9632_qs;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
max_channels = sizeof(channel_map_h9632_ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HDSPeMADI == type) {
|
if (HDSPeMADI == type) {
|
||||||
|
|
@ -341,6 +351,7 @@ void HDSPMixerCard::adjustSettings() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
max_channels = sizeof(channel_map_unity_ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HDSPeAIO == type) {
|
if (HDSPeAIO == type) {
|
||||||
|
|
@ -379,6 +390,7 @@ void HDSPMixerCard::adjustSettings() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
max_channels = sizeof(channel_map_aio_out_ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HDSP_AES == type) {
|
if (HDSP_AES == type) {
|
||||||
|
|
@ -394,6 +406,7 @@ void HDSPMixerCard::adjustSettings() {
|
||||||
meter_map_input = channel_map_aes32;
|
meter_map_input = channel_map_aes32;
|
||||||
meter_map_playback = channel_map_aes32;
|
meter_map_playback = channel_map_aes32;
|
||||||
|
|
||||||
|
max_channels = sizeof(channel_map_aes32);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HDSPeRayDAT == type) {
|
if (HDSPeRayDAT == type) {
|
||||||
|
|
@ -426,6 +439,7 @@ void HDSPMixerCard::adjustSettings() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
max_channels = sizeof(channel_map_raydat_ss);
|
||||||
}
|
}
|
||||||
|
|
||||||
window_width = (channels_playback+2)*STRIP_WIDTH;
|
window_width = (channels_playback+2)*STRIP_WIDTH;
|
||||||
|
|
@ -545,3 +559,23 @@ int HDSPMixerCard::initializeCard(HDSPMixerWindow *w)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int HDSPMixerCard::supportsLoopback() const
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
snd_ctl_elem_value_t *elemval;
|
||||||
|
snd_ctl_elem_id_t * elemid;
|
||||||
|
snd_ctl_t *handle;
|
||||||
|
snd_ctl_elem_value_alloca(&elemval);
|
||||||
|
snd_ctl_elem_id_alloca(&elemid);
|
||||||
|
if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
snd_ctl_elem_id_set_name(elemid, "Output Loopback");
|
||||||
|
snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP);
|
||||||
|
snd_ctl_elem_id_set_index(elemid, 0);
|
||||||
|
snd_ctl_elem_value_set_id(elemval, elemid);
|
||||||
|
err = snd_ctl_elem_read(handle, elemval);
|
||||||
|
snd_ctl_close(handle);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ public:
|
||||||
HDSPMixerCard(int cardtype, int id, char *shortname);
|
HDSPMixerCard(int cardtype, int id, char *shortname);
|
||||||
int channels_input, channels_playback, window_width, window_height, card_id;
|
int channels_input, channels_playback, window_width, window_height, card_id;
|
||||||
int channels_output;
|
int channels_output;
|
||||||
|
int max_channels;
|
||||||
int type;
|
int type;
|
||||||
int last_preset; /* Last activated preset before switching to another card */
|
int last_preset; /* Last activated preset before switching to another card */
|
||||||
int last_dirty; /* Last dirty flag before switching to another card */
|
int last_dirty; /* Last dirty flag before switching to another card */
|
||||||
|
|
@ -68,6 +69,7 @@ public:
|
||||||
void adjustSettings();
|
void adjustSettings();
|
||||||
void getAeb();
|
void getAeb();
|
||||||
hdsp_9632_aeb_t h9632_aeb;
|
hdsp_9632_aeb_t h9632_aeb;
|
||||||
|
int supportsLoopback() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
133
hdspmixer/src/HDSPMixerLoopback.cxx
Normal file
133
hdspmixer/src/HDSPMixerLoopback.cxx
Normal file
|
|
@ -0,0 +1,133 @@
|
||||||
|
/*
|
||||||
|
* HDSPMixer
|
||||||
|
*
|
||||||
|
* Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma implementation
|
||||||
|
#include "HDSPMixerLoopback.h"
|
||||||
|
|
||||||
|
HDSPMixerLoopback::HDSPMixerLoopback(int x, int y, int idx):Fl_Widget(x, y, 34, 15)
|
||||||
|
{
|
||||||
|
basew = (HDSPMixerWindow *)window();
|
||||||
|
index = idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HDSPMixerLoopback::draw()
|
||||||
|
{
|
||||||
|
if (_loopback == 1)
|
||||||
|
fl_draw_pixmap(loopback_xpm, x(), y());
|
||||||
|
}
|
||||||
|
|
||||||
|
int HDSPMixerLoopback::get()
|
||||||
|
{
|
||||||
|
auto const card { basew->cards[basew->current_card] };
|
||||||
|
|
||||||
|
if (card->supportsLoopback() != 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (index >= card->max_channels)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
int err;
|
||||||
|
snd_ctl_elem_value_t *elemval;
|
||||||
|
snd_ctl_elem_id_t * elemid;
|
||||||
|
snd_ctl_t *handle;
|
||||||
|
snd_ctl_elem_value_alloca(&elemval);
|
||||||
|
snd_ctl_elem_id_alloca(&elemid);
|
||||||
|
char const * const name = basew->cards[basew->current_card]->name;
|
||||||
|
if ((err = snd_ctl_open(&handle, name, SND_CTL_NONBLOCK)) < 0) {
|
||||||
|
fprintf(stderr, "Error accessing ctl interface on card %s\n.", name);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
snd_ctl_elem_id_set_name(elemid, "Output Loopback");
|
||||||
|
snd_ctl_elem_id_set_interface(elemid, SND_CTL_ELEM_IFACE_HWDEP);
|
||||||
|
snd_ctl_elem_id_set_index(elemid, index);
|
||||||
|
snd_ctl_elem_value_set_id(elemval, elemid);
|
||||||
|
if ((err = snd_ctl_elem_read(handle, elemval)) < 0)
|
||||||
|
fprintf(stderr, "cannot read loopback: %d\n", err);
|
||||||
|
else
|
||||||
|
_loopback = snd_ctl_elem_value_get_integer(elemval, 0);
|
||||||
|
|
||||||
|
snd_ctl_close(handle);
|
||||||
|
|
||||||
|
return _loopback;
|
||||||
|
}
|
||||||
|
|
||||||
|
void HDSPMixerLoopback::set(int l)
|
||||||
|
{
|
||||||
|
auto const card { basew->cards[basew->current_card] };
|
||||||
|
|
||||||
|
if (card->supportsLoopback() != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (index >= card->max_channels)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (l != _loopback) {
|
||||||
|
int err;
|
||||||
|
|
||||||
|
snd_ctl_elem_id_t *id;
|
||||||
|
snd_ctl_elem_value_t *ctl;
|
||||||
|
snd_ctl_t *handle;
|
||||||
|
|
||||||
|
snd_ctl_elem_value_alloca(&ctl);
|
||||||
|
snd_ctl_elem_id_alloca(&id);
|
||||||
|
snd_ctl_elem_id_set_name(id, "Output Loopback");
|
||||||
|
snd_ctl_elem_id_set_interface(id, SND_CTL_ELEM_IFACE_HWDEP);
|
||||||
|
snd_ctl_elem_id_set_device(id, 0);
|
||||||
|
snd_ctl_elem_id_set_index(id, index);
|
||||||
|
snd_ctl_elem_value_set_id(ctl, id);
|
||||||
|
|
||||||
|
if ((err = snd_ctl_open(
|
||||||
|
&handle, basew->cards[basew->current_card]->name, SND_CTL_NONBLOCK)) < 0) {
|
||||||
|
fprintf(stderr, "Alsa error 1: %s\n", snd_strerror(err));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
snd_ctl_elem_value_set_integer(ctl, 0, l);
|
||||||
|
if ((err = snd_ctl_elem_write(handle, ctl)) < 0) {
|
||||||
|
fprintf(stderr, "Alsa error 2: %s\n", snd_strerror(err));
|
||||||
|
snd_ctl_close(handle);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_loopback = l;
|
||||||
|
|
||||||
|
snd_ctl_close(handle);
|
||||||
|
|
||||||
|
redraw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int HDSPMixerLoopback::handle(int e)
|
||||||
|
{
|
||||||
|
int button3 = Fl::event_button3();
|
||||||
|
switch (e) {
|
||||||
|
case FL_PUSH:
|
||||||
|
set(!_loopback);
|
||||||
|
if (button3)
|
||||||
|
relative->set(_loopback);
|
||||||
|
basew->checkState();
|
||||||
|
redraw();
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
return Fl_Widget::handle(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
48
hdspmixer/src/HDSPMixerLoopback.h
Normal file
48
hdspmixer/src/HDSPMixerLoopback.h
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* HDSPMixer
|
||||||
|
*
|
||||||
|
* Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org)
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma interface
|
||||||
|
#ifndef HDSPMixerLoopback_H
|
||||||
|
#define HDSPMixerLoopback_H
|
||||||
|
|
||||||
|
#include <FL/Fl.H>
|
||||||
|
#include <FL/Fl_Widget.H>
|
||||||
|
#include "HDSPMixerWindow.h"
|
||||||
|
#include "pixmaps.h"
|
||||||
|
|
||||||
|
class HDSPMixerWindow;
|
||||||
|
|
||||||
|
class HDSPMixerLoopback:public Fl_Widget
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
HDSPMixerWindow *basew;
|
||||||
|
int _loopback{-1};
|
||||||
|
public:
|
||||||
|
HDSPMixerLoopback *relative;
|
||||||
|
int index;
|
||||||
|
HDSPMixerLoopback(int x, int y, int idx);
|
||||||
|
void draw();
|
||||||
|
int handle(int e);
|
||||||
|
int get();
|
||||||
|
void set(int l);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
@ -204,6 +204,7 @@ HDSPMixerOutput::HDSPMixerOutput(int x, int y, int w, int h, int num):Fl_Group(x
|
||||||
peak = new HDSPMixerPeak(x+3, y+4, 0);
|
peak = new HDSPMixerPeak(x+3, y+4, 0);
|
||||||
gain = new HDSPMixerGain(x+3, y+175, 0);
|
gain = new HDSPMixerGain(x+3, y+175, 0);
|
||||||
meter = new HDSPMixerMeter(x+20, y+27, false, peak);
|
meter = new HDSPMixerMeter(x+20, y+27, false, peak);
|
||||||
|
loopback = new HDSPMixerLoopback(x+1, y+208, out_num);
|
||||||
end();
|
end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
#include <FL/fl_draw.H>
|
#include <FL/fl_draw.H>
|
||||||
#include <alsa/sound/hdsp.h>
|
#include <alsa/sound/hdsp.h>
|
||||||
#include "HDSPMixerFader.h"
|
#include "HDSPMixerFader.h"
|
||||||
|
#include "HDSPMixerLoopback.h"
|
||||||
#include "HDSPMixerPeak.h"
|
#include "HDSPMixerPeak.h"
|
||||||
#include "HDSPMixerGain.h"
|
#include "HDSPMixerGain.h"
|
||||||
#include "HDSPMixerMeter.h"
|
#include "HDSPMixerMeter.h"
|
||||||
|
|
@ -36,6 +37,7 @@
|
||||||
|
|
||||||
class HDSPMixerFader;
|
class HDSPMixerFader;
|
||||||
class HDSPMixerGain;
|
class HDSPMixerGain;
|
||||||
|
class HDSPMixerLoopback;
|
||||||
class HDSPMixerPeak;
|
class HDSPMixerPeak;
|
||||||
class HDSPMixerMeter;
|
class HDSPMixerMeter;
|
||||||
class HDSPMixerOutputData;
|
class HDSPMixerOutputData;
|
||||||
|
|
@ -56,6 +58,7 @@ public:
|
||||||
HDSPMixerFader *fader;
|
HDSPMixerFader *fader;
|
||||||
HDSPMixerGain *gain;
|
HDSPMixerGain *gain;
|
||||||
HDSPMixerMeter *meter;
|
HDSPMixerMeter *meter;
|
||||||
|
HDSPMixerLoopback *loopback;
|
||||||
HDSPMixerOutput(int x, int y, int w, int h, int out);
|
HDSPMixerOutput(int x, int y, int w, int h, int out);
|
||||||
void draw();
|
void draw();
|
||||||
void draw_background();
|
void draw_background();
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ class HDSPMixerOutputData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int fader_pos;
|
int fader_pos;
|
||||||
|
int loopback;
|
||||||
HDSPMixerOutputData();
|
HDSPMixerOutputData();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,13 +25,15 @@ HDSPMixerOutputs::HDSPMixerOutputs(int x, int y, int w, int h, int nchans):Fl_Gr
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < HDSP_MAX_CHANNELS+2; i += 2) {
|
for (i = 0; i < HDSP_MAX_CHANNELS+2; i += 2) {
|
||||||
strips[i] = new HDSPMixerOutput((i*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i);
|
strips[i] = new HDSPMixerOutput((i*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i);
|
||||||
strips[i+1] = new HDSPMixerOutput(((i+1)*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i+1);
|
strips[i+1] = new HDSPMixerOutput(((i+1)*STRIP_WIDTH), y, STRIP_WIDTH, SMALLSTRIP_HEIGHT, i+1);
|
||||||
/* Setup linked stereo channels */
|
/* Setup linked stereo channels */
|
||||||
strips[i]->fader->relative = strips[i+1]->fader;
|
strips[i]->fader->relative = strips[i+1]->fader;
|
||||||
strips[i+1]->fader->relative = strips[i]->fader;
|
strips[i+1]->fader->relative = strips[i]->fader;
|
||||||
strips[i]->fader->gain = strips[i]->gain;
|
strips[i]->fader->gain = strips[i]->gain;
|
||||||
strips[i+1]->fader->gain = strips[i+1]->gain;
|
strips[i+1]->fader->gain = strips[i+1]->gain;
|
||||||
|
strips[i]->loopback->relative = strips[i+1]->loopback;
|
||||||
|
strips[i+1]->loopback->relative = strips[i]->loopback;
|
||||||
|
|
||||||
}
|
}
|
||||||
empty_aebo[0] = new HDSPMixerEmpty((nchans-6)*STRIP_WIDTH, y, 2*STRIP_WIDTH, SMALLSTRIP_HEIGHT, 0);
|
empty_aebo[0] = new HDSPMixerEmpty((nchans-6)*STRIP_WIDTH, y, 2*STRIP_WIDTH, SMALLSTRIP_HEIGHT, 0);
|
||||||
|
|
|
||||||
|
|
@ -36,5 +36,6 @@ HDSPMixerPresetData::HDSPMixerPresetData()
|
||||||
over = 3;
|
over = 3;
|
||||||
level = 0;
|
level = 0;
|
||||||
rate = 1;
|
rate = 1;
|
||||||
|
loopback = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ public:
|
||||||
int over;
|
int over;
|
||||||
int rate;
|
int rate;
|
||||||
int rmsplus3;
|
int rmsplus3;
|
||||||
|
int loopback;
|
||||||
HDSPMixerPresetData();
|
HDSPMixerPresetData();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,7 @@ void HDSPMixerPresets::save_preset(int prst) {
|
||||||
basew->playbacks->strips[i]->data[card][speed][p]->dest = basew->playbacks->strips[i]->targets->selected;
|
basew->playbacks->strips[i]->data[card][speed][p]->dest = basew->playbacks->strips[i]->targets->selected;
|
||||||
|
|
||||||
basew->outputs->strips[i]->data[card][speed][p]->fader_pos = basew->outputs->strips[i]->fader->pos[0];
|
basew->outputs->strips[i]->data[card][speed][p]->fader_pos = basew->outputs->strips[i]->fader->pos[0];
|
||||||
|
basew->outputs->strips[i]->data[card][speed][p]->loopback = basew->outputs->strips[i]->loopback->get();
|
||||||
}
|
}
|
||||||
/* Line outs */
|
/* Line outs */
|
||||||
basew->outputs->strips[HDSP_MAX_CHANNELS]->data[card][speed][p]->fader_pos = basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0];
|
basew->outputs->strips[HDSP_MAX_CHANNELS]->data[card][speed][p]->fader_pos = basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0];
|
||||||
|
|
@ -188,6 +189,7 @@ void HDSPMixerPresets::restore_preset(int prst) {
|
||||||
basew->playbacks->strips[i]->targets->selected = basew->playbacks->strips[i]->data[card][speed][p]->dest;
|
basew->playbacks->strips[i]->targets->selected = basew->playbacks->strips[i]->data[card][speed][p]->dest;
|
||||||
|
|
||||||
basew->outputs->strips[i]->fader->pos[0] = basew->outputs->strips[i]->data[card][speed][p]->fader_pos;
|
basew->outputs->strips[i]->fader->pos[0] = basew->outputs->strips[i]->data[card][speed][p]->fader_pos;
|
||||||
|
basew->outputs->strips[i]->loopback->set(basew->outputs->strips[i]->data[card][speed][p]->loopback);
|
||||||
}
|
}
|
||||||
/* Line outs */
|
/* Line outs */
|
||||||
basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0] = basew->outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][p]->fader_pos;
|
basew->outputs->strips[HDSP_MAX_CHANNELS]->fader->pos[0] = basew->outputs->strips[HDSP_MAX_CHANNELS+1]->data[card][speed][p]->fader_pos;
|
||||||
|
|
|
||||||
|
|
@ -471,6 +471,29 @@ void HDSPMixerWindow::save()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Output loopback data */
|
||||||
|
for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) {
|
||||||
|
auto const strip = outputs->strips[channel];
|
||||||
|
|
||||||
|
for (int card = 0; card < MAX_CARDS; ++card) {
|
||||||
|
auto const data = strip->data[card];
|
||||||
|
|
||||||
|
for (int speed = 0; speed < 3; ++speed) {
|
||||||
|
auto const spd = data[speed];
|
||||||
|
|
||||||
|
for (int preset = 0; preset < 8; ++preset) {
|
||||||
|
auto const data = spd[preset];
|
||||||
|
|
||||||
|
if (fwrite((void *)&(data->loopback),
|
||||||
|
sizeof(int),
|
||||||
|
1,
|
||||||
|
out) != 1)
|
||||||
|
goto save_error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* If the file we want to write already exists it could be possible that it
|
/* If the file we want to write already exists it could be possible that it
|
||||||
* was saved with a newer version. If that is the case we just append its
|
* was saved with a newer version. If that is the case we just append its
|
||||||
* content to the new output file and that way ensure that we don't lose any
|
* content to the new output file and that way ensure that we don't lose any
|
||||||
|
|
@ -519,6 +542,7 @@ void HDSPMixerWindow::load()
|
||||||
bool ondisk_v1 = false;
|
bool ondisk_v1 = false;
|
||||||
int pan_array_size = 14; /* old (pre 1.0.24) HDSP_MAX_DEST */
|
int pan_array_size = 14; /* old (pre 1.0.24) HDSP_MAX_DEST */
|
||||||
int channels_per_card = 26; /* old (pre 1.0.24) HDSP_MAX_CHANNELS */
|
int channels_per_card = 26; /* old (pre 1.0.24) HDSP_MAX_CHANNELS */
|
||||||
|
bool res = true;
|
||||||
|
|
||||||
if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) {
|
if (fread(&buffer, sizeof(char), sizeof(buffer), file) != sizeof(buffer)) {
|
||||||
goto load_error;
|
goto load_error;
|
||||||
|
|
@ -647,6 +671,46 @@ void HDSPMixerWindow::load()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Output loopback data */
|
||||||
|
for (int channel = 0; channel < HDSP_MAX_CHANNELS; ++channel) {
|
||||||
|
auto const strip = outputs->strips[channel];
|
||||||
|
|
||||||
|
for (int card = 0; card < MAX_CARDS; ++card) {
|
||||||
|
auto const data = strip->data[card];
|
||||||
|
|
||||||
|
for (int speed = 0; speed < 3; ++speed) {
|
||||||
|
auto const spd = data[speed];
|
||||||
|
|
||||||
|
for (int preset = 0; preset < 8; ++preset) {
|
||||||
|
auto const data = spd[preset];
|
||||||
|
|
||||||
|
/* TODO: Somewhere we get a value of 5 from, investigate
|
||||||
|
* this another day. For now just reset it here and
|
||||||
|
* continue looping to reset the value.
|
||||||
|
*/
|
||||||
|
data->loopback = 0;
|
||||||
|
|
||||||
|
if (feof(file)) {
|
||||||
|
res = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ferror(file)) {
|
||||||
|
res = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fread((void *)&(data->loopback), sizeof(int), 1, file) != 1)
|
||||||
|
res = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!res)
|
||||||
|
goto load_error;
|
||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
setTitleWithFilename();
|
setTitleWithFilename();
|
||||||
resetMixer();
|
resetMixer();
|
||||||
|
|
@ -844,6 +908,8 @@ void HDSPMixerWindow::restoreDefaults(int card)
|
||||||
}
|
}
|
||||||
outputs->strips[i]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0;
|
outputs->strips[i]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0;
|
||||||
outputs->strips[i+1]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0;
|
outputs->strips[i+1]->data[card][speed][preset]->fader_pos = (preset != 4) ? 137*CF : 0;
|
||||||
|
outputs->strips[i]->data[card][speed][preset]->loopback = 0;
|
||||||
|
outputs->strips[i+1]->data[card][speed][preset]->loopback = 0;
|
||||||
if (preset == 3 || preset == 7) {
|
if (preset == 3 || preset == 7) {
|
||||||
inputs->strips[i]->data[card][speed][preset]->mute = 1;
|
inputs->strips[i]->data[card][speed][preset]->mute = 1;
|
||||||
inputs->strips[i+1]->data[card][speed][preset]->mute = 1;
|
inputs->strips[i+1]->data[card][speed][preset]->mute = 1;
|
||||||
|
|
@ -1051,6 +1117,8 @@ void HDSPMixerWindow::checkState()
|
||||||
/* Outputs row */
|
/* Outputs row */
|
||||||
if (outputs->strips[i]->data[current_card][speed][p]->fader_pos != outputs->strips[i]->fader->pos[0])
|
if (outputs->strips[i]->data[current_card][speed][p]->fader_pos != outputs->strips[i]->fader->pos[0])
|
||||||
corrupt++;
|
corrupt++;
|
||||||
|
if (outputs->strips[i]->data[current_card][speed][p]->loopback != outputs->strips[i]->loopback->get())
|
||||||
|
corrupt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Global settings */
|
/* Global settings */
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ hdspmixer_SOURCES = \
|
||||||
HDSPMixerEmpty.h \
|
HDSPMixerEmpty.h \
|
||||||
HDSPMixerOutput.cxx \
|
HDSPMixerOutput.cxx \
|
||||||
HDSPMixerOutput.h \
|
HDSPMixerOutput.h \
|
||||||
|
HDSPMixerLoopback.cxx \
|
||||||
|
HDSPMixerLoopback.h \
|
||||||
HDSPMixerIOMixer.cxx \
|
HDSPMixerIOMixer.cxx \
|
||||||
HDSPMixerIOMixer.h \
|
HDSPMixerIOMixer.h \
|
||||||
HDSPMixerSelector.cxx \
|
HDSPMixerSelector.cxx \
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
#define STRIP_WIDTH 36
|
#define STRIP_WIDTH 36
|
||||||
#define FULLSTRIP_HEIGHT 253
|
#define FULLSTRIP_HEIGHT 253
|
||||||
#define SMALLSTRIP_HEIGHT 208
|
#define SMALLSTRIP_HEIGHT 224
|
||||||
#define MENU_HEIGHT 20
|
#define MENU_HEIGHT 20
|
||||||
|
|
||||||
#define MIN_WIDTH 2*STRIP_WIDTH
|
#define MIN_WIDTH 2*STRIP_WIDTH
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@
|
||||||
#include "../pixmaps/over.xpm"
|
#include "../pixmaps/over.xpm"
|
||||||
#include "../pixmaps/peak.xpm"
|
#include "../pixmaps/peak.xpm"
|
||||||
#include "../pixmaps/solo.xpm"
|
#include "../pixmaps/solo.xpm"
|
||||||
|
#include "../pixmaps/loopback.xpm"
|
||||||
#include "../pixmaps/iomixer_r.xpm"
|
#include "../pixmaps/iomixer_r.xpm"
|
||||||
#include "../pixmaps/output_r.xpm"
|
#include "../pixmaps/output_r.xpm"
|
||||||
#include "../pixmaps/matrix_black.xpm"
|
#include "../pixmaps/matrix_black.xpm"
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ extern char const * output_xpm[];
|
||||||
extern char const * over_xpm[];
|
extern char const * over_xpm[];
|
||||||
extern char const * peak_xpm[];
|
extern char const * peak_xpm[];
|
||||||
extern char const * solo_xpm[];
|
extern char const * solo_xpm[];
|
||||||
|
extern char const * loopback_xpm[];
|
||||||
extern char const * iomixer_r_xpm[];
|
extern char const * iomixer_r_xpm[];
|
||||||
extern char const * output_r_xpm[];
|
extern char const * output_r_xpm[];
|
||||||
extern char const * matrix_white_xpm[];
|
extern char const * matrix_white_xpm[];
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue