Mon, 30 Sep 2002 01:05:18 +0000
[gaim-migrate @ 3670]
Phase II. No longer do you have to worry about protocol plugins. When
Gaim probes plugins on load, it will detect protocol plugins and add them
to the list of available protocols. When you try to log an account on with
one of them, Gaim will automatically load the plugin--when no more accounts
need the protocol--Gaim will automatically unload it. Protocol plugins are
no longer available in the plugins ui, and no protocols are compiled statically
by default.
| 1 | 1 | /* |
| 2 | * gaim | |
| 3 | * | |
| 4 | * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
| 5 | * | |
| 6 | * This program is free software; you can redistribute it and/or modify | |
| 7 | * it under the terms of the GNU General Public License as published by | |
| 8 | * the Free Software Foundation; either version 2 of the License, or | |
| 9 | * (at your option) any later version. | |
| 10 | * | |
| 11 | * This program is distributed in the hope that it will be useful, | |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | * GNU General Public License for more details. | |
| 15 | * | |
| 16 | * You should have received a copy of the GNU General Public License | |
| 17 | * along with this program; if not, write to the Free Software | |
| 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 19 | * | |
| 20 | */ | |
| 21 | ||
|
349
6f7d28b0f98d
[gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
338
diff
changeset
|
22 | #ifdef HAVE_CONFIG_H |
|
2090
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2048
diff
changeset
|
23 | #include <config.h> |
|
349
6f7d28b0f98d
[gaim-migrate @ 359]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
338
diff
changeset
|
24 | #endif |
| 1 | 25 | #include <stdio.h> |
|
1057
0161606a8549
[gaim-migrate @ 1067]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1006
diff
changeset
|
26 | #include <stdlib.h> |
| 1 | 27 | #include <string.h> |
| 28 | #include <sys/time.h> | |
| 29 | #include <unistd.h> | |
| 30 | #include <fcntl.h> | |
| 31 | #include <sys/wait.h> | |
| 63 | 32 | #include <unistd.h> |
| 33 | #include <sys/types.h> | |
| 34 | #include <sys/stat.h> | |
| 1 | 35 | |
| 36 | #ifdef ESD_SOUND | |
| 37 | #include <esd.h> | |
| 38 | #endif | |
| 39 | ||
| 2179 | 40 | #ifdef ARTSC_SOUND |
| 41 | #include <artsc.h> | |
| 42 | #endif | |
| 43 | ||
| 1 | 44 | #ifdef NAS_SOUND |
| 45 | #include <audio/audiolib.h> | |
| 46 | #endif | |
| 47 | ||
| 48 | #include "gaim.h" | |
| 49 | #include "sounds/BuddyArrive.h" | |
| 50 | #include "sounds/BuddyLeave.h" | |
| 51 | #include "sounds/Send.h" | |
| 52 | #include "sounds/Receive.h" | |
| 1694 | 53 | #include "sounds/RedAlert.h" |
| 1 | 54 | |
| 3319 | 55 | gboolean mute_sounds = 0; |
| 56 | ||
|
3326
0f6a30288c89
[gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents:
3319
diff
changeset
|
57 | /* description, option bit, default sound array, and it's size. * |
|
0f6a30288c89
[gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents:
3319
diff
changeset
|
58 | * if you want it to get displayed in the prefs dialog, it needs * |
|
0f6a30288c89
[gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents:
3319
diff
changeset
|
59 | * to be added to the sound_order array in prefs.c, if not, and * |
|
0f6a30288c89
[gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents:
3319
diff
changeset
|
60 | * it has no option bit, set it to 0. the order here has to match * |
|
0f6a30288c89
[gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents:
3319
diff
changeset
|
61 | * the defines in gaim.h. -Robot101 */ |
|
3060
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
62 | struct sound_struct sounds[NUM_SOUNDS] = { |
| 3279 | 63 | {N_("Buddy logs in"), OPT_SOUND_LOGIN, BuddyArrive, sizeof(BuddyArrive)}, |
| 64 | {N_("Buddy logs out"), OPT_SOUND_LOGOUT, BuddyLeave, sizeof(BuddyLeave)}, | |
| 65 | {N_("Message received"), OPT_SOUND_RECV, Receive, sizeof(Receive)}, | |
| 66 | {N_("Message received begins conversation"), OPT_SOUND_FIRST_RCV, Receive, sizeof(Receive)}, | |
| 67 | {N_("Message sent"), OPT_SOUND_SEND, Send, sizeof(Send)}, | |
| 68 | {N_("Person enters chat"), OPT_SOUND_CHAT_JOIN, BuddyArrive, sizeof(BuddyArrive)}, | |
| 69 | {N_("Person leaves chat"), OPT_SOUND_CHAT_PART, BuddyLeave, sizeof(BuddyLeave)}, | |
| 70 | {N_("You talk in chat"), OPT_SOUND_CHAT_YOU_SAY, Send, sizeof(Send)}, | |
| 71 | {N_("Others talk in chat"), OPT_SOUND_CHAT_SAY, Receive, sizeof(Receive)}, | |
|
3326
0f6a30288c89
[gaim-migrate @ 3344]
Robert McQueen <robot101@debian.org>
parents:
3319
diff
changeset
|
72 | /* this isn't a terminator, it's the buddy pounce default sound event ;-) */ |
| 3279 | 73 | {NULL, 0, RedAlert, sizeof(RedAlert)}, |
| 74 | {N_("Someone says your name in chat"), OPT_SOUND_CHAT_NICK, Receive, sizeof(Receive)} | |
|
3060
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
75 | }; |
| 3367 | 76 | int sound_order[] = { |
| 77 | SND_BUDDY_ARRIVE, SND_BUDDY_LEAVE, | |
| 78 | SND_FIRST_RECEIVE, SND_RECEIVE, SND_SEND, | |
| 79 | SND_CHAT_JOIN, SND_CHAT_LEAVE, | |
| 80 | SND_CHAT_YOU_SAY, SND_CHAT_SAY, SND_CHAT_NICK, 0 | |
| 81 | }; | |
|
3060
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
82 | |
|
655
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
83 | static int check_dev(char *dev) |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
84 | { |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
85 | struct stat stat_buf; |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
86 | uid_t user = getuid(); |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
87 | gid_t group = getgid(), other_groups[32]; |
| 899 | 88 | int i, numgroups; |
| 89 | ||
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
90 | if ((numgroups = getgroups(32, other_groups)) == -1) |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
91 | return 0; |
|
655
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
92 | if (stat(dev, &stat_buf)) |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
93 | return 0; |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
94 | if (user == stat_buf.st_uid && stat_buf.st_mode & S_IWUSR) |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
95 | return 1; |
| 899 | 96 | if (stat_buf.st_mode & S_IWGRP) { |
| 97 | if (group == stat_buf.st_gid) | |
| 98 | return 1; | |
| 99 | for (i = 0; i < numgroups; i++) | |
| 100 | if (other_groups[i] == stat_buf.st_gid) | |
| 101 | return 1; | |
| 102 | } | |
|
655
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
103 | if (stat_buf.st_mode & S_IWOTH) |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
104 | return 1; |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
105 | return 0; |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
106 | } |
|
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
107 | |
| 1 | 108 | |
|
2048
4ac8b9622c9e
[gaim-migrate @ 2058]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1805
diff
changeset
|
109 | static void play_audio(unsigned char *data, int size) |
| 1 | 110 | { |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
111 | int fd; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
112 | |
| 2467 | 113 | fd = open("/dev/audio", O_WRONLY | O_EXCL | O_NDELAY); |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
114 | if (fd < 0) |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
115 | return; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
116 | write(fd, data, size); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
117 | close(fd); |
| 1 | 118 | } |
| 119 | ||
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
120 | static void play_audio_file(char *file) |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
121 | { |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
122 | /* here we can assume that we can write to /dev/audio */ |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
123 | char *buf; |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
124 | struct stat info; |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
125 | int fd = open(file, O_RDONLY); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
126 | if (fd <= 0) { |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
127 | return; |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
128 | } |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
129 | fstat(fd, &info); |
| 1109 | 130 | if (info.st_size < 24) |
| 131 | return; | |
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
132 | buf = malloc(info.st_size + 1); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
133 | read(fd, buf, 24); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
134 | read(fd, buf, info.st_size - 24); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
135 | close(fd); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
136 | |
| 2467 | 137 | fd = open("/dev/audio", O_WRONLY | O_EXCL | O_NDELAY); |
| 1109 | 138 | if (fd < 0) { |
| 139 | free(buf); | |
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
140 | return; |
| 1109 | 141 | } |
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
142 | write(fd, buf, info.st_size - 24); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
143 | free(buf); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
144 | close(fd); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
145 | } |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
146 | |
| 1 | 147 | static int can_play_audio() |
| 148 | { | |
|
655
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
149 | return check_dev("/dev/audio"); |
| 1 | 150 | } |
| 151 | ||
| 152 | ||
| 2179 | 153 | #if defined(ESD_SOUND) || defined(ARTSC_SOUND) |
| 154 | ||
| 1 | 155 | /* |
| 156 | ** This routine converts from ulaw to 16 bit linear. | |
| 157 | ** | |
| 158 | ** Craig Reese: IDA/Supercomputing Research Center | |
| 159 | ** 29 September 1989 | |
| 160 | ** | |
| 161 | ** References: | |
| 162 | ** 1) CCITT Recommendation G.711 (very difficult to follow) | |
| 163 | ** 2) MIL-STD-188-113,"Interoperability and Performance Standards | |
| 164 | ** for Analog-to_Digital Conversion Techniques," | |
| 165 | ** 17 February 1987 | |
| 166 | ** | |
| 167 | ** Input: 8 bit ulaw sample | |
| 168 | ** Output: signed 16 bit linear sample | |
| 169 | ** Z-note -- this is from libaudiofile. Thanks guys! | |
| 170 | */ | |
| 171 | ||
|
2158
76fdbca877a0
[gaim-migrate @ 2168]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2090
diff
changeset
|
172 | static int _af_ulaw2linear(unsigned char ulawbyte) |
| 1 | 173 | { |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
174 | static int exp_lut[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 }; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
175 | int sign, exponent, mantissa, sample; |
| 1 | 176 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
177 | ulawbyte = ~ulawbyte; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
178 | sign = (ulawbyte & 0x80); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
179 | exponent = (ulawbyte >> 4) & 0x07; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
180 | mantissa = ulawbyte & 0x0F; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
181 | sample = exp_lut[exponent] + (mantissa << (exponent + 3)); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
182 | if (sign != 0) |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
183 | sample = -sample; |
| 1 | 184 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
185 | return (sample); |
| 1 | 186 | } |
| 187 | ||
| 2179 | 188 | #endif |
| 189 | ||
| 190 | #ifdef ESD_SOUND | |
| 1 | 191 | |
|
354
617f05e0e800
[gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
192 | int esd_fd; |
| 1 | 193 | |
| 194 | static int play_esd(unsigned char *data, int size) | |
| 195 | { | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
196 | int i; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
197 | guint16 *lineardata; |
| 1 | 198 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
199 | lineardata = g_malloc(size * 2); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
200 | |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
201 | for (i = 0; i < size; i++) |
| 1 | 202 | lineardata[i] = _af_ulaw2linear(data[i]); |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
203 | |
|
354
617f05e0e800
[gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
204 | write(esd_fd, lineardata, size * 2); |
| 1 | 205 | |
|
354
617f05e0e800
[gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
206 | close(esd_fd); |
| 1 | 207 | g_free(lineardata); |
| 208 | ||
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
209 | return 1; |
| 1 | 210 | |
| 211 | } | |
| 212 | ||
| 213 | static int can_play_esd() | |
| 214 | { | |
|
354
617f05e0e800
[gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
215 | esd_format_t format = ESD_BITS16 | ESD_STREAM | ESD_PLAY | ESD_MONO; |
|
655
5f1cffc65856
[gaim-migrate @ 665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
606
diff
changeset
|
216 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
217 | esd_fd = esd_play_stream(format, 8012, NULL, "gaim"); |
|
354
617f05e0e800
[gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
218 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
219 | if (esd_fd < 0) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
220 | return 0; |
|
354
617f05e0e800
[gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
221 | } |
|
617f05e0e800
[gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
222 | |
|
617f05e0e800
[gaim-migrate @ 364]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
349
diff
changeset
|
223 | return 1; |
| 1 | 224 | } |
| 225 | ||
| 226 | #endif | |
| 227 | ||
| 2179 | 228 | #ifdef ARTSC_SOUND |
| 229 | ||
| 230 | static int play_artsc(unsigned char *data, int size) | |
| 231 | { | |
| 232 | arts_stream_t stream; | |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2370
diff
changeset
|
233 | guint16 *lineardata; |
| 2179 | 234 | int result = 1; |
| 235 | int error; | |
| 236 | int i; | |
| 237 | ||
| 238 | lineardata = g_malloc(size * 2); | |
| 239 | ||
| 240 | for (i = 0; i < size; i++) { | |
| 241 | lineardata[i] = _af_ulaw2linear(data[i]); | |
| 242 | } | |
| 243 | ||
| 244 | stream = arts_play_stream(8012, 16, 1, "gaim"); | |
| 245 | ||
| 246 | error = arts_write(stream, lineardata, size); | |
| 247 | if (error < 0) { | |
| 248 | result = 0; | |
| 249 | } | |
| 250 | ||
| 251 | arts_close_stream(stream); | |
| 252 | ||
| 253 | g_free(lineardata); | |
| 254 | ||
| 255 | arts_free(); | |
| 256 | ||
| 257 | return result; | |
| 258 | } | |
| 259 | ||
| 260 | static int can_play_artsc() | |
| 261 | { | |
| 262 | int error; | |
| 263 | ||
|
2183
8b16ee759b38
[gaim-migrate @ 2193]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2179
diff
changeset
|
264 | error = arts_init(); |
| 2179 | 265 | if (error < 0) |
| 266 | return 0; | |
| 267 | ||
| 268 | return 1; | |
| 269 | } | |
| 270 | ||
|
2186
9579014b7a49
[gaim-migrate @ 2196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2183
diff
changeset
|
271 | static int artsc_play_file(char *file) |
| 2179 | 272 | { |
| 273 | struct stat stat_buf; | |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2370
diff
changeset
|
274 | unsigned char *buf = NULL; |
| 2179 | 275 | int result = 0; |
| 276 | int fd = -1; | |
| 277 | ||
|
2680
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
278 | if (!can_play_artsc()) |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
279 | return 0; |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
280 | |
| 2179 | 281 | fd = open(file, O_RDONLY); |
| 282 | if (fd < 0) | |
|
2680
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
283 | return 0; |
| 2179 | 284 | |
|
2680
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
285 | if (fstat(fd, &stat_buf)) { |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
286 | close(fd); |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
287 | return 0; |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
288 | } |
| 2179 | 289 | |
|
2680
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
290 | if (!stat_buf.st_size) { |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
291 | close(fd); |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
292 | return 0; |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
293 | } |
| 2179 | 294 | |
| 295 | buf = g_malloc(stat_buf.st_size); | |
|
2680
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
296 | if (!buf) { |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
297 | close(fd); |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
298 | return 0; |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
299 | } |
|
2372
c24942700dfd
[gaim-migrate @ 2385]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2370
diff
changeset
|
300 | |
|
2680
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
301 | if (read(fd, buf, stat_buf.st_size) < 0) { |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
302 | g_free(buf); |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
303 | close(fd); |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
304 | return 0; |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
305 | } |
| 2179 | 306 | |
| 307 | result = play_artsc(buf, stat_buf.st_size); | |
| 308 | ||
|
2680
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
309 | g_free(buf); |
|
07b9104a394c
[gaim-migrate @ 2693]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2601
diff
changeset
|
310 | close(fd); |
| 2179 | 311 | return result; |
| 312 | } | |
| 313 | ||
| 314 | #endif /* ARTSC_SOUND */ | |
| 315 | ||
| 1 | 316 | #ifdef NAS_SOUND |
| 317 | ||
| 318 | char nas_server[] = "localhost"; | |
| 319 | AuServer *nas_serv = NULL; | |
| 320 | ||
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
321 | static AuBool NasEventHandler(AuServer * aud, AuEvent * ev, AuEventHandlerRec * handler) |
| 1 | 322 | { |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
323 | AuElementNotifyEvent *event = (AuElementNotifyEvent *) ev; |
| 1 | 324 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
325 | if (ev->type == AuEventTypeElementNotify) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
326 | switch (event->kind) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
327 | case AuElementNotifyKindState: |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
328 | switch (event->cur_state) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
329 | case AuStateStop: |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
330 | _exit(0); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
331 | } |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
332 | break; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
333 | } |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
334 | } |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
335 | return AuTrue; |
| 1 | 336 | } |
| 337 | ||
| 338 | ||
| 339 | static int play_nas(unsigned char *data, int size) | |
| 340 | { | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
341 | AuDeviceID device = AuNone; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
342 | AuFlowID flow; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
343 | AuElement elements[3]; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
344 | int i, n, w; |
| 1 | 345 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
346 | /* look for an output device */ |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
347 | for (i = 0; i < AuServerNumDevices(nas_serv); i++) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
348 | if ((AuDeviceKind(AuServerDevice(nas_serv, i)) == |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
349 | AuComponentKindPhysicalOutput) && |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
350 | AuDeviceNumTracks(AuServerDevice(nas_serv, i)) == 1) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
351 | device = AuDeviceIdentifier(AuServerDevice(nas_serv, i)); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
352 | break; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
353 | } |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
354 | } |
| 1 | 355 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
356 | if (device == AuNone) |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
357 | return 0; |
| 1 | 358 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
359 | if (!(flow = AuCreateFlow(nas_serv, NULL))) |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
360 | return 0; |
| 1 | 361 | |
| 362 | ||
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
363 | AuMakeElementImportClient(&elements[0], 8012, AuFormatULAW8, 1, AuTrue, size, size / 2, 0, NULL); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
364 | AuMakeElementExportDevice(&elements[1], 0, device, 8012, AuUnlimitedSamples, 0, NULL); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
365 | AuSetElements(nas_serv, flow, AuTrue, 2, elements, NULL); |
| 1 | 366 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
367 | AuStartFlow(nas_serv, flow, NULL); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
368 | |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
369 | AuWriteElement(nas_serv, flow, 0, size, data, AuTrue, NULL); |
| 1 | 370 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
371 | AuRegisterEventHandler(nas_serv, AuEventHandlerIDMask, 0, flow, NasEventHandler, NULL); |
| 1 | 372 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
373 | while (1) { |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
374 | AuHandleEvents(nas_serv); |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
375 | } |
| 1 | 376 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
377 | return 1; |
| 1 | 378 | } |
| 379 | ||
| 380 | static int can_play_nas() | |
| 381 | { | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
382 | if ((nas_serv = AuOpenServer(NULL, 0, NULL, 0, NULL, NULL))) |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
383 | return 1; |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
384 | return 0; |
| 1 | 385 | } |
| 386 | ||
| 1109 | 387 | static int play_nas_file(char *file) |
| 388 | { | |
| 389 | struct stat stat_buf; | |
| 390 | char *buf; | |
| 391 | int ret; | |
| 392 | int fd = open(file, O_RDONLY); | |
| 393 | if (fd <= 0) | |
| 394 | return 0; | |
| 395 | ||
| 396 | if (!can_play_nas()) | |
| 397 | return 0; | |
| 398 | ||
| 399 | if (stat(file, &stat_buf)) | |
| 400 | return 0; | |
| 401 | ||
| 402 | if (!stat_buf.st_size) | |
| 403 | return 0; | |
| 404 | ||
| 405 | buf = malloc(stat_buf.st_size); | |
| 406 | read(fd, buf, stat_buf.st_size); | |
| 407 | ret = play_nas(buf, stat_buf.st_size); | |
| 408 | free(buf); | |
| 409 | return ret; | |
| 410 | } | |
| 411 | ||
| 1 | 412 | #endif |
| 413 | ||
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
414 | void play_file(char *filename) |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
415 | { |
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
416 | int pid; |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
417 | |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
418 | #ifdef _WIN32 |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
419 | return; |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
420 | #endif |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
421 | |
| 3004 | 422 | if (sound_options & OPT_SOUND_BEEP) { |
| 423 | gdk_beep(); | |
| 424 | return; | |
| 425 | } | |
| 426 | ||
|
3060
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
427 | else if (sound_options & OPT_SOUND_NORMAL) { |
|
3072
c1404ba009f5
[gaim-migrate @ 3086]
Robert McQueen <robot101@debian.org>
parents:
3060
diff
changeset
|
428 | debug_printf("attempting to play audio file with internal method -- this is unlikely to work\n"); |
|
3060
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
429 | } |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
430 | |
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
431 | pid = fork(); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
432 | |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
433 | if (pid < 0) |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
434 | return; |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
435 | else if (pid == 0) { |
|
2601
e071e397e55e
[gaim-migrate @ 2614]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2580
diff
changeset
|
436 | alarm(30); |
| 3004 | 437 | |
|
3025
1cc919eae2eb
[gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents:
3006
diff
changeset
|
438 | if ((sound_options & OPT_SOUND_CMD) && sound_cmd[0]) { |
|
1214
dccd13b431d5
[gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1109
diff
changeset
|
439 | char *args[4]; |
|
dccd13b431d5
[gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1109
diff
changeset
|
440 | char command[4096]; |
|
2777
f6dd295a0174
[gaim-migrate @ 2790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2680
diff
changeset
|
441 | |
|
f6dd295a0174
[gaim-migrate @ 2790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2680
diff
changeset
|
442 | g_snprintf(command, sizeof(command), sound_cmd, filename); |
|
f6dd295a0174
[gaim-migrate @ 2790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2680
diff
changeset
|
443 | |
|
1214
dccd13b431d5
[gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1109
diff
changeset
|
444 | args[0] = "sh"; |
|
dccd13b431d5
[gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1109
diff
changeset
|
445 | args[1] = "-c"; |
|
dccd13b431d5
[gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1109
diff
changeset
|
446 | args[2] = command; |
|
dccd13b431d5
[gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1109
diff
changeset
|
447 | args[3] = NULL; |
|
dccd13b431d5
[gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1109
diff
changeset
|
448 | execvp(args[0], args); |
|
dccd13b431d5
[gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1109
diff
changeset
|
449 | _exit(0); |
|
dccd13b431d5
[gaim-migrate @ 1224]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1109
diff
changeset
|
450 | } |
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
451 | #ifdef ESD_SOUND |
|
2580
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
452 | else if (sound_options & OPT_SOUND_ESD) { |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
453 | if (esd_play_file(NULL, filename, 1)) |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
454 | _exit(0); |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
455 | } |
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
456 | #endif |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
457 | |
|
2186
9579014b7a49
[gaim-migrate @ 2196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2183
diff
changeset
|
458 | #ifdef ARTSC_SOUND |
|
2580
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
459 | else if (sound_options & OPT_SOUND_ARTSC) { |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
460 | if (artsc_play_file(filename)) |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
461 | _exit(0); |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
462 | } |
|
2186
9579014b7a49
[gaim-migrate @ 2196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2183
diff
changeset
|
463 | #endif |
|
9579014b7a49
[gaim-migrate @ 2196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2183
diff
changeset
|
464 | |
| 1109 | 465 | #ifdef NAS_SOUND |
|
2580
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
466 | else if (sound_options & OPT_SOUND_NAS) { |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
467 | if (play_nas_file(filename)) |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
468 | _exit(0); |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
469 | } |
| 1109 | 470 | #endif |
|
2580
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
471 | else if ((sound_options & OPT_SOUND_NORMAL) && |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
472 | can_play_audio()) { |
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
473 | play_audio_file(filename); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
474 | _exit(0); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
475 | } |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
476 | |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
477 | _exit(0); |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
478 | } |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
479 | } |
|
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
480 | |
|
133
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
108
diff
changeset
|
481 | void play(unsigned char *data, int size) |
| 1 | 482 | { |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
483 | int pid; |
| 1 | 484 | |
| 485 | #ifdef _WIN32 | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
486 | return; |
| 1 | 487 | #endif |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
488 | |
| 3004 | 489 | if (sound_options & OPT_SOUND_BEEP) { |
| 490 | gdk_beep(); | |
| 491 | return; | |
| 492 | } | |
|
3025
1cc919eae2eb
[gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents:
3006
diff
changeset
|
493 | |
|
1cc919eae2eb
[gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents:
3006
diff
changeset
|
494 | else if ((sound_options & OPT_SOUND_CMD) && sound_cmd[0]) { |
| 3284 | 495 | char command[4096]; |
| 496 | FILE *child; | |
| 497 | ||
| 498 | g_snprintf(command, sizeof(command), sound_cmd, "-"); | |
| 499 | ||
| 500 | child=popen(command, "w"); | |
| 501 | if(child == NULL) { | |
| 502 | perror("popen"); | |
| 503 | return; | |
| 504 | } | |
| 505 | ||
| 506 | fwrite(data, size, 1, child); | |
| 507 | pclose(child); | |
|
3025
1cc919eae2eb
[gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents:
3006
diff
changeset
|
508 | return; |
|
1cc919eae2eb
[gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents:
3006
diff
changeset
|
509 | } |
|
1cc919eae2eb
[gaim-migrate @ 3038]
Robert McQueen <robot101@debian.org>
parents:
3006
diff
changeset
|
510 | |
| 1 | 511 | pid = fork(); |
| 3004 | 512 | |
| 1 | 513 | if (pid < 0) |
| 514 | return; | |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
515 | else if (pid == 0) { |
|
2601
e071e397e55e
[gaim-migrate @ 2614]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2580
diff
changeset
|
516 | alarm(30); |
| 3004 | 517 | |
| 1 | 518 | #ifdef ESD_SOUND |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
519 | /* ESD is our player of choice. Are we OK to |
|
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
520 | * go there? */ |
| 3004 | 521 | if (sound_options & OPT_SOUND_ESD) { |
|
2580
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
522 | if (can_play_esd()) { |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
523 | if (play_esd(data, size)) |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
524 | _exit(0); |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
525 | } |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
526 | } |
| 1 | 527 | #endif |
| 528 | ||
| 2179 | 529 | #ifdef ARTSC_SOUND |
| 530 | /* ArtsC is the new second choice. */ | |
| 3006 | 531 | if (sound_options & OPT_SOUND_ARTSC) { |
|
2580
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
532 | if (can_play_artsc()) { |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
533 | if (play_artsc(data, size)) |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
534 | _exit(0); |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
535 | } |
| 2179 | 536 | } |
| 537 | #endif | |
| 538 | ||
| 1 | 539 | #ifdef NAS_SOUND |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
540 | /* NAS is our second choice setup. */ |
| 3006 | 541 | if (sound_options & OPT_SOUND_NAS) { |
|
2580
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
542 | if (can_play_nas()) { |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
543 | if (play_nas(data, size)) |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
544 | _exit(0); |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
545 | } |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
546 | } |
| 1 | 547 | #endif |
| 548 | ||
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
549 | /* Lastly, we can try just plain old /dev/audio */ |
| 3005 | 550 | if (sound_options & OPT_SOUND_NORMAL) { |
|
2580
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
551 | if (can_play_audio()) { |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
552 | play_audio(data, size); |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
553 | _exit(0); |
|
b6e87f6ad217
[gaim-migrate @ 2593]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2478
diff
changeset
|
554 | } |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
555 | } |
|
668
ec2f81e3c95a
[gaim-migrate @ 678]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
655
diff
changeset
|
556 | |
|
ec2f81e3c95a
[gaim-migrate @ 678]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
655
diff
changeset
|
557 | _exit(0); |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
558 | } |
| 1 | 559 | } |
| 560 | ||
|
133
418de720c20d
[gaim-migrate @ 143]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
108
diff
changeset
|
561 | extern int logins_not_muted; |
| 1 | 562 | |
| 563 | void play_sound(int sound) | |
| 564 | { | |
| 3319 | 565 | |
| 566 | if (mute_sounds) | |
| 567 | return; | |
| 568 | ||
|
1235
c8d6eef4edce
[gaim-migrate @ 1245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1214
diff
changeset
|
569 | if (awaymessage && !(sound_options & OPT_SOUND_WHEN_AWAY)) |
|
c8d6eef4edce
[gaim-migrate @ 1245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1214
diff
changeset
|
570 | return; |
|
c8d6eef4edce
[gaim-migrate @ 1245]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1214
diff
changeset
|
571 | |
|
3060
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
572 | if ((sound == SND_BUDDY_ARRIVE) && !logins_not_muted) |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
573 | return; |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
574 | |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
575 | if (sound >= NUM_SOUNDS) { |
|
3072
c1404ba009f5
[gaim-migrate @ 3086]
Robert McQueen <robot101@debian.org>
parents:
3060
diff
changeset
|
576 | debug_printf("sorry old fruit... can't say I know that sound: ", sound, "\n"); |
|
3060
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
577 | return; |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
578 | } |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
579 | |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
580 | /* check NULL for sounds that don't have an option, ie buddy pounce */ |
|
3072
c1404ba009f5
[gaim-migrate @ 3086]
Robert McQueen <robot101@debian.org>
parents:
3060
diff
changeset
|
581 | if ((sound_options & sounds[sound].opt) || (sounds[sound].opt == 0)) { |
|
3060
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
582 | if (sound_file[sound]) { |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
583 | play_file(sound_file[sound]); |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
584 | } else { |
|
ec62758f47b3
[gaim-migrate @ 3074]
Robert McQueen <robot101@debian.org>
parents:
3025
diff
changeset
|
585 | play(sounds[sound].snd, sounds[sound].snd_size); |
|
1006
fb2f2a403962
[gaim-migrate @ 1016]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
899
diff
changeset
|
586 | } |
|
1252
94fbface2d84
[gaim-migrate @ 1262]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
1235
diff
changeset
|
587 | } |
|
64
cb32d6c8353c
[gaim-migrate @ 74]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
63
diff
changeset
|
588 | } |