forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMozSounds.cmd
337 lines (260 loc) · 9.95 KB
/
MozSounds.cmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
/* mozillasounds.cmd */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*****************************************************************************/
/* */
/* MozSounds.cmd enables the user to associate sounds with Mozilla events */
/* using the WPS Sound object in the System Setup folder. It does not set */
/* the sounds itself - it simply adds entries to the Sound object's list of */
/* events. This script only needs to be run once or twice: the first time */
/* to enable selected sounds, and the second time to disable most of them */
/* because they're so annoying. */
/* */
/* This script's design is coordinated with code in widget\os2\nsSound.cpp. */
/* Please don't make significant changes to it (e.g. changing the names of */
/* ini-file entries) without first examining nsSound.cpp. */
/* */
/* Note to Translators: everything that needs to be translated has been */
/* grouped together and placed toward the end of the file (a heading */
/* identifies where to start). Please preserve the formatting and don't */
/* change any of the numeric values. Thanks... */
/* */
/*****************************************************************************/
call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
call SysLoadFuncs
call InitVariables
call Main
exit
/*****************************************************************************/
Main:
/* Get the location of the MMOS2 directory. */
path = value('MMBASE',,'OS2ENVIRONMENT')
if path = '' then do
call SysCls
call EnvError
return
end
path = strip(path, B, ';')
/* Confirm that mmpm.ini can be found where we expect it to be. */
iniFile = path'\MMPM.INI'
call SysFileTree iniFile, 'stem', 'FO'
if stem.0 <> 1 then do
call SysCls
call IniError
return
end
/* Make a backup of mmpm.ini if one doesn't already exist. */
call SysFileTree iniFile'.BAK', 'stem', 'FO'
if stem.0 = 0 then
'@xcopy' iniFile path'\*.*.BAK /T > NUL'
/* Events are identified by number - MMOS2 uses 0-12. Mozilla events */
/* start at 800. If this conflicts with another app, the base index */
/* can be changed. The new value is stored in mmpm.ini where it can */
/* be accessed by the Mozilla apps and this script. */
baseIndex = SysIni(iniFile, 'MOZILLA_Events', 'BaseIndex')
baseIndex = strip(baseIndex, T, X2C('0'))
if baseIndex = 'ERROR:' | baseIndex <= '12' then
baseIndex = defaultIndex
/* The main loop: display current status & respond to commands */
do FOREVER
call SysCls
call GetStatus
call Display
pull cmd parms
select
when cmd = soundCmd then do
rc = SysOpenObject('<WP_SOUND>', 2, 'TRUE')
leave
end
when cmd = exitCmd then do
leave
end
when cmd = disableCmd then do
call Disable
end
when cmd = enableCmd then do
call Enable
end
/* this command is "undocumented" & should NOT be translated */
when cmd = 'BASEINDEX' then do
call ChangeBaseIndex
end
otherwise
end
end
return
/*****************************************************************************/
/* Generate a listing of Mozilla events and their status: */
/* 'enabled' if there's an entry, 'disabled' if not. */
GetStatus:
ctr = 1
show = 0
do nbr = 1 to events.0
rc = SysIni(iniFile, 'MMPM2_AlarmSounds', baseIndex + events.nbr.ndx)
if rc = 'ERROR:' then
status = disabledWord
else
status = enabledWord
if show = 0 then do
out = " "nbr". " left(events.nbr.name, 15) status
show = 1
end
else do
line.ctr = left(out, 35) " " nbr". " left(events.nbr.name, 15) status
ctr = ctr + 1
show = 0
end
end
if show = 1 then
line.ctr = left(out, 35)
return
/*****************************************************************************/
/* Disable an event sound by deleting its entry. */
Disable:
parse var parms nbr parms
if nbr = allWord then do
nbr = '1'
parms = '2 3 4 5 6 7'
end
do while nbr <> ''
if nbr >= '1' & nbr <= '7' then do
key = baseIndex + events.nbr.ndx
rc = SysIni(iniFile, 'MMPM2_AlarmSounds', key, 'DELETE:')
end
parse var parms nbr parms
end
return
/*****************************************************************************/
/* Enable an event sound by adding an entry whose format is: */
/* 'fq_soundfile#event_name#volume'. */
/* Since this script isn't intended to set the actual soundfile, */
/* it uses the same dummy value as MMOS2: 'x:\MMOS2\SOUNDS\' */
Enable:
parse var parms nbr parms
if nbr = allWord then do
nbr = '1'
parms = '2 3 4 5 6 7'
end
do while nbr <> ''
if nbr >= '1' & nbr <= '7' then do
key = baseIndex + events.nbr.ndx
/* if there's an existing entry, preserve the filename */
sndFile = SysIni(iniFile, 'MMPM2_AlarmSounds', key)
if sndFile = 'ERROR:' | left(sndFile, 1) = '#' then
sndFile = path'\'soundsDir'\'
else
parse var sndFile sndFile '#' .
value = sndFile'#'events.nbr.name' (Mozilla)#80'X2C('0')
rc = SysIni(iniFile, 'MMPM2_AlarmSounds', key, value)
end
parse var parms nbr parms
end
return
/*****************************************************************************/
/* An "undocumented" function to change & restore the base index. */
/* It renumbers existing entries using the new base & adds or deletes */
/* a 'MOZILLA_Events\BaseIndex' entry depending on the new value. */
ChangeBaseIndex:
parse var parms newIndex parms
/* Ignore invalid values. */
if newIndex = '' | newIndex <= '12' then
return
/* Do NOT translate this. */
if newIndex = 'DEFAULT' then
newIndex = defaultIndex
/* If there's no change, exit after deleting the entry if it's the default */
if newIndex = baseIndex then do
if baseIndex = defaultIndex then
rc SysIni(iniFile, 'MOZILLA_Events', 'BaseIndex', 'DELETE:')
return
end
/* Move existing entries from the old index to the new index. */
do nbr = 1 to events.0
value = SysIni(iniFile, 'MMPM2_AlarmSounds', baseIndex + events.nbr.ndx)
if value = 'ERROR:' then
iterate
rc = SysIni(iniFile, 'MMPM2_AlarmSounds', baseIndex + events.nbr.ndx, 'DELETE:')
rc = SysIni(iniFile, 'MMPM2_AlarmSounds', newIndex + events.nbr.ndx, value)
end
/* If the new index is the default, delete the ini entry; */
/* otherwise, add or update the entry with the new value. */
if newIndex = defaultIndex then
rc = SysIni(iniFile, 'MOZILLA_Events', 'BaseIndex', 'DELETE:')
else
rc = SysIni(iniFile, 'MOZILLA_Events', 'BaseIndex', newIndex||X2C('0'))
baseIndex = newIndex
return
/*****************************************************************************/
/* All strings that need to be translated appear below */
/*****************************************************************************/
/* Just like it says, init variables. */
InitVariables:
events.0 = 7
events.1.ndx = 0
events.1.name = 'New Mail'
events.2.ndx = 1
events.2.name = 'Alert Dialog'
events.3.ndx = 2
events.3.name = 'Confirm Dialog'
events.4.ndx = 3
events.4.name = 'Prompt Dialog'
events.5.ndx = 4
events.5.name = 'Select Dialog'
events.6.ndx = 5
events.6.name = 'Menu Execute'
events.7.ndx = 6
events.7.name = 'Menu Popup'
enabledWord = 'enabled'
disabledWord = 'disabled'
allWord = 'ALL'
soundsDir = 'SOUNDS'
enableCmd = 'E'
disableCmd = 'D'
soundCmd = 'S'
exitCmd = 'X'
defaultIndex = '800'
return
/*****************************************************************************/
/* Display event status & command info. */
Display:
say
say " MozSounds.cmd lets you use the WPS Sound object in your System Setup"
say " folder to assign sounds to the Mozilla events listed below. It does"
say " NOT set the sound itself - it just adds and deletes entries in Sound."
say " New or changed sounds take effect after the Mozilla app is restarted."
say
say " Event Status Event Status"
say " ----------- -------- ----------- --------"
say line.1
say line.2
say line.3
say line.4
say
say " Commands:"
say " E - enable event sound(s) example: 'E 1' or 'E 3 5 7' or 'E All'"
say " D - disable event sound(s) example: 'D 2' or 'D 1 4 6' or 'D All'"
say " S - open the WPS Sound object"
say " X - exit this script"
say
call charout ," Enter a command > "
return
/*****************************************************************************/
/* Display an error message */
EnvError:
say ""
say "ERROR: the 'MMBASE' environment variable is missing or invalid!"
say " Your Mozilla app won't be able to play system sounds without it."
say " Please add a line to config.sys like the following, then reboot."
say " SET MMBASE=x:\MMOS2 (where 'x' is the correct drive)"
return
/*****************************************************************************/
/* Display an error message */
IniError:
say ""
say "ERROR: file '"iniFile"' is missing or invalid!"
say " Your Mozilla app won't be able to play system sounds without it."
say " Please confirm that the 'SET MMBASE=' line in config.sys points"
say " at your MMOS2 directory and that it contains 'MMPM.INI'."
return
/*****************************************************************************/