Mercurial > hg > xemacs-beta
annotate src/hpplay.c @ 4928:ea701c23ed84
change text_width method to take a window, in preparation for unicode-internal changes
-------------------- ChangeLog entries follow: --------------------
src/ChangeLog addition:
2010-01-19 Ben Wing <ben@xemacs.org>
* console-impl.h (struct console_methods):
* console-stream.c (stream_text_width):
* redisplay-msw.c (mswindows_output_string):
* redisplay-msw.c (mswindows_text_width):
* redisplay-tty.c (tty_text_width):
* redisplay-xlike-inc.c (XLIKE_text_width):
* redisplay-xlike-inc.c (XLIKE_output_string):
* redisplay.c:
* redisplay.c (redisplay_window_text_width_ichar_string):
* redisplay.c (redisplay_text_width_string):
Change the text_width method to take a window instead of a frame.
Needed for Unicode-internal.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Tue, 19 Jan 2010 11:21:34 -0600 |
parents | b3ea9c582280 |
children | 19a72041c5ed |
rev | line source |
---|---|
428 | 1 /* Copyright (C) 1993 Free Software Foundation, Inc. |
2 | |
3 This file is part of XEmacs. | |
4 | |
5 XEmacs is free software; you can redistribute it and/or modify it | |
6 under the terms of the GNU General Public License as published by the | |
7 Free Software Foundation; either version 2, or (at your option) any | |
8 later version. | |
9 | |
10 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
13 for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
16 along with XEmacs; see the file COPYING. If not, write to | |
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
18 Boston, MA 02111-1307, USA. */ | |
19 | |
20 /* Synched up with: Not in FSF. */ | |
21 | |
563 | 22 /* This file Mule-ized by Ben Wing, 5-15-01. */ |
23 | |
428 | 24 |
25 /*** | |
26 NAME | |
27 hpplay | |
28 PURPOSE | |
29 Play .au sound files on hp9000s700 | |
30 BUGS | |
31 I have been unable to figure out how to use the volume feature, so no | |
444 | 32 attempt has been made to honor the volume arg of play_sound_* |
428 | 33 This means that all sounds are played at 100%. |
34 The gain parameter can be set by using the hp-play-gain variable. | |
35 | |
36 NOTES | |
37 This file is mostly based on the player program found in the examples | |
38 directory of the audio software delivered on our machines. The path I | |
39 found it under was /usr/audio/examples/player.c | |
40 This file contained no credits and no copyrights. The original fileheader | |
41 is given below. | |
42 HISTORY | |
43 lynbech - Feb 10, 1993: Created. | |
44 ***/ | |
45 | |
46 /* ORIGINAL FILEHEADER: | |
47 * player - command-line audio file player | |
48 * Aug. 28 1991 | |
49 * by three unknown, unsung audio programmers | |
50 * (well, only two are unsung) | |
51 */ | |
52 | |
53 #include <config.h> | |
54 #include "lisp.h" | |
55 | |
563 | 56 #include "sound.h" |
442 | 57 |
428 | 58 #include <Alib.h> |
59 #include <CUlib.h> | |
60 | |
442 | 61 |
428 | 62 Lisp_Object Vhp_play_server; |
63 Lisp_Object Vhp_play_speaker; | |
458 | 64 Fixnum hp_play_gain; |
428 | 65 |
66 /* Functions */ | |
67 | |
68 /* error handling */ | |
563 | 69 void |
2367 | 70 player_error_internal (Audio * audio, Ascbyte * text, long errorCode) |
428 | 71 { |
563 | 72 Extbyte errorbuff[132]; |
867 | 73 Ibyte *interr; |
428 | 74 |
563 | 75 AGetErrorText (audio, errorCode, errorbuff, 131); |
4834
b3ea9c582280
Use new cygwin_conv_path API with Cygwin 1.7 for converting names between Win32 and POSIX, UTF-8-aware, with attendant changes elsewhere
Ben Wing <ben@xemacs.org>
parents:
4759
diff
changeset
|
76 EXTERNAL_TO_C_STRING (errorbuf, interr, Qerror_message_encoding); |
563 | 77 |
78 signal_error (Qsound_error, text, build_string (interr)); | |
428 | 79 } |
80 | |
563 | 81 long |
82 myHandler( Audio * audio, AErrorEvent * err_event) | |
428 | 83 { |
84 player_error_internal(audio, "Internal sound error", err_event->error_code); | |
85 return 1; /* Must return something, was orig. an exit */ | |
86 } | |
87 | |
88 /* Playing */ | |
89 void | |
2286 | 90 play_bucket_internal( Audio *audio, SBucket *pSBucket, long UNUSED (volume)) |
428 | 91 { |
563 | 92 SBPlayParams playParams; |
93 AGainEntry gainEntry; | |
94 ATransID xid; | |
95 long status; | |
96 | |
97 playParams.priority = APriorityNormal; /* normal priority */ | |
428 | 98 |
563 | 99 /* |
100 * We can't signal an error, because all h*ll would break loose if | |
101 * we did. | |
102 */ | |
103 if (EQ (Vhp_play_speaker, Qexternal)) | |
104 gainEntry.u.o.out_dst = AODTMonoJack; | |
105 else | |
106 gainEntry.u.o.out_dst = AODTMonoIntSpeaker; | |
428 | 107 |
563 | 108 gainEntry.u.o.out_ch = AOCTMono; |
109 gainEntry.gain = AUnityGain; | |
110 playParams.gain_matrix.type = AGMTOutput; /* gain matrix */ | |
111 playParams.gain_matrix.num_entries = 1; | |
112 playParams.gain_matrix.gain_entries = &gainEntry; | |
113 playParams.play_volume = hp_play_gain; /* play volume */ | |
114 playParams.pause_first = False; /* don't pause */ | |
115 playParams.start_offset.type = ATTSamples; /* start offset 0 */ | |
116 playParams.start_offset.u.samples = 0; | |
117 playParams.duration.type = ATTFullLength; /* play entire sample */ | |
118 playParams.loop_count = 1; /* play sample just once */ | |
119 playParams.previous_transaction = 0; /* no linked transaction */ | |
120 playParams.event_mask = 0; /* don't solicit any events */ | |
428 | 121 |
563 | 122 /* |
123 * play the sound bucket | |
124 */ | |
125 xid = APlaySBucket( audio, pSBucket, &playParams, NULL ); | |
428 | 126 |
563 | 127 /* |
128 * set close mode to prevent playback from stopping | |
129 * when we close audio connection | |
130 */ | |
131 ASetCloseDownMode( audio, AKeepTransactions, &status ); | |
428 | 132 |
563 | 133 /* |
134 * That's all, folks! | |
135 * Always destroy bucket and close connection. | |
136 */ | |
137 ADestroySBucket( audio, pSBucket, &status ); | |
138 ACloseAudio( audio, &status ); | |
428 | 139 } |
140 | |
141 void | |
563 | 142 play_sound_file (Extbyte * sound_file, int volume) |
428 | 143 { |
563 | 144 sbucket *pSBucket; |
145 Audio *audio; | |
146 long status; | |
147 AErrorHandler prevHandler; /* pointer to previous handler */ | |
148 Extbyte *server; | |
428 | 149 |
563 | 150 if (STRINGP (Vhp_play_server)) |
4834
b3ea9c582280
Use new cygwin_conv_path API with Cygwin 1.7 for converting names between Win32 and POSIX, UTF-8-aware, with attendant changes elsewhere
Ben Wing <ben@xemacs.org>
parents:
4759
diff
changeset
|
151 LISP_STRING_TO_EXTERNAL (Vhp_play_server, server, |
b3ea9c582280
Use new cygwin_conv_path API with Cygwin 1.7 for converting names between Win32 and POSIX, UTF-8-aware, with attendant changes elsewhere
Ben Wing <ben@xemacs.org>
parents:
4759
diff
changeset
|
152 Qunix_host_name_encoding); |
563 | 153 else |
428 | 154 server = ""; |
155 | |
563 | 156 /* |
157 * open audio connection | |
158 */ | |
159 audio = AOpenAudio( server, &status ); | |
160 if( status ) | |
161 { | |
162 player_error_internal( audio, "Open audio failed", status ); | |
428 | 163 } |
164 | |
563 | 165 /* replace default error handler */ |
166 prevHandler = ASetErrorHandler(myHandler); | |
428 | 167 |
563 | 168 /* |
169 * Load the audio file into a sound bucket | |
170 */ | |
428 | 171 |
563 | 172 pSBucket = ALoadAFile( audio, sound_file, AFFUnknown, 0, NULL, NULL ); |
428 | 173 |
563 | 174 /* |
175 * Play the bucket | |
176 */ | |
428 | 177 |
563 | 178 play_bucket_internal(audio, pSBucket, volume); |
428 | 179 |
563 | 180 ASetErrorHandler(prevHandler); |
428 | 181 } |
182 | |
183 | |
442 | 184 int |
2367 | 185 play_sound_data (Binbyte * data, int UNUSED (length), int volume) |
428 | 186 { |
563 | 187 SBucket *pSBucket; |
188 Audio *audio; | |
189 AErrorHandler prevHandler; | |
190 SunHeader *header; | |
191 long status; | |
192 Extbyte *server; | |
193 int result; | |
428 | 194 |
563 | 195 /* #### Finish this to return an error code. |
196 This function signal a lisp error. How consistent with the rest. | |
197 What if this function is needed in doing the beep for the error? | |
442 | 198 |
563 | 199 Apparently the author of this didn't read the comment in |
200 Fplay_sound. | |
201 */ | |
442 | 202 |
203 | |
563 | 204 if (STRINGP (Vhp_play_server)) |
4834
b3ea9c582280
Use new cygwin_conv_path API with Cygwin 1.7 for converting names between Win32 and POSIX, UTF-8-aware, with attendant changes elsewhere
Ben Wing <ben@xemacs.org>
parents:
4759
diff
changeset
|
205 LISP_STRING_TO_EXTERNAL (Vhp_play_server, server, |
b3ea9c582280
Use new cygwin_conv_path API with Cygwin 1.7 for converting names between Win32 and POSIX, UTF-8-aware, with attendant changes elsewhere
Ben Wing <ben@xemacs.org>
parents:
4759
diff
changeset
|
206 Qunix_host_name_encoding); |
563 | 207 else |
428 | 208 server = ""; |
209 | |
563 | 210 /* open audio connection */ |
211 audio = AOpenAudio( server, &status ); | |
212 if(status) | |
213 { | |
214 player_error_internal( audio, "Open audio failed", status ); | |
428 | 215 } |
216 | |
563 | 217 /* replace default error handler */ |
218 prevHandler = ASetErrorHandler (myHandler); | |
428 | 219 |
563 | 220 /* Create sound bucket */ |
221 header = (SunHeader *) data; | |
428 | 222 |
563 | 223 pSBucket = ACreateSBucket(audio, NULL, NULL, &status); |
224 if (status) | |
225 player_error_internal( audio, "Bucket creation failed", status ); | |
428 | 226 |
2367 | 227 APutSBucketData(audio, pSBucket, 0, (CBinbyte *) (data + header->header_size), header->data_length, &status); |
428 | 228 |
563 | 229 if (status) |
230 player_error_internal( audio, "Audio data copy failed", status ); | |
428 | 231 |
563 | 232 /* Play sound */ |
233 play_bucket_internal(audio, pSBucket, volume); | |
428 | 234 |
563 | 235 ASetErrorHandler(prevHandler); |
236 if (status) | |
237 player_error_internal( audio, "Audio data copy failed", status ); | |
442 | 238 |
563 | 239 return 1; |
428 | 240 } |
241 | |
242 void | |
243 vars_of_hpplay (void) | |
244 { | |
245 DEFVAR_LISP ("hp-play-server", &Vhp_play_server /* | |
246 A string, determining which server to play sound at. | |
247 Note that this is specific to the HP sound implementation, and you should | |
248 not make your functions depend on it. | |
249 */ ); | |
250 | |
251 Vhp_play_server = Qnil; | |
252 | |
253 DEFVAR_LISP ("hp-play-speaker", &Vhp_play_speaker /* | |
254 If this variable is the symbol `external', sound is played externally. | |
255 If the environment variable SPEAKER is set, that value is used for | |
256 initializing this variable. | |
257 Note that this is specific to the HP sound implementation, and you should | |
258 not make your functions depend on it. | |
259 */ ); | |
260 | |
261 Vhp_play_speaker = intern ("internal"); | |
262 | |
563 | 263 DEFVAR_INT ("hp-play-gain", &hp_play_gain /* |
428 | 264 Global gain value for playing sounds. |
265 Default value is AUnityGain which means keep level. | |
266 Please refer to the HP documentation, for instance in | |
267 `Using the Audio Application Program Interface', for details on how to | |
268 interpret this variable. | |
269 Note that this is specific to the HP sound implementation, and you should | |
270 not make your functions depend on it. | |
271 */ ); | |
272 | |
273 hp_play_gain = AUnityGain; | |
274 } | |
275 | |
276 void | |
277 init_hpplay (void) | |
278 { | |
771 | 279 if (egetenv ("SPEAKER")) |
280 Vhp_play_speaker = intern (egetenv ("SPEAKER")); | |
428 | 281 } |