2 AHI - The AHI preferences program
3 Copyright (C) 2017 The AROS Dev Team
4 Copyright (C) 1996-2005 Martin Blom <martin@blom.org>
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
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.
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.
22 #include <aros/debug.h>
26 #include <exec/memory.h>
27 #include <libraries/asl.h>
28 #include <libraries/gadtools.h>
29 #include <libraries/mui.h>
31 #include <clib/alib_protos.h>
32 #include <proto/ahi.h>
33 #include <proto/exec.h>
34 #include <proto/dos.h>
35 #include <proto/intuition.h>
36 #include <proto/utility.h>
38 #define NO_INLINE_STDARG
39 #include <proto/muimaster.h>
40 #undef NO_INLINE_STDARG
47 #include "ahiprefs_Cat.h"
53 #if defined( __morphos__ ) || defined( __MORPHOS__ )
56 #define DoMethod(obj, ... ) \
58 ULONG _args[] = { __VA_ARGS__ }; \
59 DoMethodA(obj,(Msg) _args); \
63 /* Why the #$*@ is this not in libamiga.a?! */
68 struct Hook
* h
= (struct Hook
*) REG_A0
;
69 void* o
= (void*) REG_A2
;
70 void* msg
= (void*) REG_A1
;
72 return ( ( (ULONG(*)(struct Hook
*, void*, void*)) *h
->h_SubEntry
)( h
, o
, msg
) );
75 struct EmulLibEntry _HookEntry
=
77 TRAP_LIB
, 0, (void (*)(void)) &gw_HookEntry
80 __asm( ".globl HookEntry;HookEntry=_HookEntry" );
83 #elif defined(__AMIGAOS4__)
85 ULONG
HookEntry(struct Hook
* h
, void* o
, void* msg
) {
86 return ( ( (ULONG(*)(struct Hook
*, void*, void*)) *h
->h_SubEntry
)( h
, o
, msg
) );
93 static void GUINewSettings(void);
94 static void GUINewUnit(void);
95 static void GUINewMode(void);
104 ACTID_OPEN
=1, ACTID_SAVEAS
, ACTID_ABOUT
, ACTID_QUIT
,
105 ACTID_DEFAULT
, ACTID_LASTSAVED
, ACTID_RESTORE
,
107 ACTID_HELP
, ACTID_GUIDE
, ACTID_HELPINDEX
,
108 ACTID_SAVE
, ACTID_USE
,
110 ACTID_TABS
, ACTID_PAGE
,
112 ACTID_UNIT
, ACTID_MODE
,
115 ACTID_FREQ
, ACTID_CHANNELS
, ACTID_OUTVOL
, ACTID_MONVOL
, ACTID_GAIN
,
116 ACTID_INPUT
, ACTID_OUTPUT
,
117 SHOWID_FREQ
, SHOWID_CHANNELS
, SHOWID_OUTVOL
, SHOWID_MONVOL
, SHOWID_GAIN
,
118 SHOWID_INPUT
, SHOWID_OUTPUT
,
122 ACTID_DEBUG
, ACTID_SURROUND
, ACTID_ECHO
, ACTID_CLIPMV
,
123 ACTID_CPULIMIT
, SHOWID_CPULIMIT
,
124 ACTID_ACTIME
, SHOWID_ACTIME
,
131 #define Title(t) { NM_TITLE, t, NULL, 0, 0, NULL }
132 #define Item(t,s,i) { NM_ITEM, t, s, 0, 0, (APTR)i }
133 #define ItemBar { NM_ITEM, NM_BARLABEL, NULL, 0, 0, NULL }
134 #define SubItem(t,s,i) { NM_SUB, t, s, 0, 0, (APTR)i }
135 #define SubBar { NM_SUB, NM_BARLABEL, NULL, 0, 0, NULL }
136 #define EndMenu { NM_END, NULL, NULL, 0, 0, NULL }
137 #define ItCk(t,s,i,f) { NM_ITEM, t, s, f, 0, (APTR)i }
139 struct Library
*MUIMasterBase
= NULL
;
142 struct MUIMasterIFace
*IMUIMaster
= NULL
;
145 static struct NewMenu Menus
[] = {
146 Title( NULL
/* Project */ ),
147 Item( NULL
/* Open... */, NULL
, ACTID_OPEN
),
148 Item( NULL
/* Save As... */, NULL
, ACTID_SAVEAS
),
150 Item( NULL
/* About... */, NULL
, ACTID_ABOUT
),
152 Item( NULL
/* Quit */, NULL
, ACTID_QUIT
),
153 Title( NULL
/* Edit */ ),
154 Item( NULL
/* Reset To Defaults */, NULL
, ACTID_DEFAULT
),
155 Item( NULL
/* Last Saved */, NULL
, ACTID_LASTSAVED
),
156 Item( NULL
/* Restore */, NULL
, ACTID_RESTORE
),
157 Title( NULL
/* Settings */ ),
158 ItCk( NULL
/* Create Icons? */, NULL
, ACTID_ICONS
, CHECKIT
|MENUTOGGLE
),
159 Title( NULL
/* Help */ ),
160 ItCk( NULL
/* Help... */, NULL
, ACTID_HELP
, COMMSEQ
),
162 Item( NULL
/* AHI User's guide... */, NULL
, ACTID_GUIDE
),
163 Item( NULL
/* Concept Index... */, NULL
, ACTID_HELPINDEX
),
167 static char *PageNames
[] =
169 NULL
, /* Mode settings */
170 NULL
, /* Advanced settings */
174 static char * ScaleLabels
[] = {
176 NULL
, /* Safe, dynamic */
177 NULL
, /* Full volume */
183 static char * DebugLabels
[] = {
191 static char * EchoLabels
[] = {
198 static char * SurroundLabels
[] = {
204 static char * ClipMVLabels
[] = {
205 NULL
, /* Without clipping */
206 NULL
, /* With clipping */
210 /***** Local function to update the strings above ****************************/
212 static void UpdateStrings(void) {
215 (char**) &msgMenuProject
,
216 (char**) &msgItemOpen
,
217 (char**) &msgItemSaveAs
,
218 (char**) &msgItemAbout
,
219 (char**) &msgItemQuit
,
220 (char**) &msgMenuEdit
,
221 (char**) &msgItemDefaults
,
222 (char**) &msgItemLastSaved
,
223 (char**) &msgItemRestore
,
224 (char**) &msgMenuSettings
,
225 (char**) &msgItemCreateIcons
,
226 (char**) &msgMenuHelp
,
227 (char**) &msgItemHelp
,
228 (char**) &msgItemUsersGuide
,
229 (char**) &msgItemConceptIndex
232 struct NewMenu
*menuptr
;
235 D(bug("[AHI:Prefs] %s()\n", __func__
);)
237 menuptr
= (struct NewMenu
*) &Menus
;
238 stringptr
= (char ***) &strings
;
240 while(menuptr
->nm_Type
!= NM_END
)
242 if(menuptr
->nm_Label
== NULL
)
244 if(strlen(**stringptr
) != 0) {
245 menuptr
->nm_CommKey
= **stringptr
;
247 menuptr
->nm_Label
= **stringptr
+ strlen(**stringptr
) + 1;
253 PageNames
[0] = (char *) msgPageMode
;
254 PageNames
[1] = (char *) msgPageAdvanced
;
255 DebugLabels
[0] = (char *) msgDebugNone
;
256 DebugLabels
[1] = (char *) msgDebugLow
;
257 DebugLabels
[2] = (char *) msgDebugHigh
;
258 DebugLabels
[3] = (char *) msgDebugFull
;
259 EchoLabels
[0] = (char *) msgEchoEnabled
;
260 EchoLabels
[1] = (char *) msgEchoFast
;
261 EchoLabels
[2] = (char *) msgEchoDisabled
;
262 SurroundLabels
[0] = (char *) msgSurroundEnabled
;
263 SurroundLabels
[1] = (char *) msgSurroundDisabled
;
264 ClipMVLabels
[0] = (char *) msgMVNoClip
;
265 ClipMVLabels
[1] = (char *) msgMVClip
;
266 ScaleLabels
[0] = (char *) msgSMFixedSafe
;
267 ScaleLabels
[1] = (char *) msgSMDynSafe
;
268 ScaleLabels
[2] = (char *) msgSM0dB
;
269 ScaleLabels
[3] = (char *) msgSM3dB
;
270 ScaleLabels
[4] = (char *) msgSM6dB
;
273 static Object
*MUIWindow
,*MUIList
,*MUIInfos
,*MUIUnit
;
274 static Object
*MUIFreq
,*MUIChannels
,*MUIOutvol
,*MUIMonvol
,*MUIGain
,*MUIInput
,*MUIOutput
;
275 static Object
*MUILFreq
,*MUILChannels
,*MUILOutvol
,*MUILMonvol
,*MUILGain
,*MUILInput
,*MUILOutput
,*MUIPlay
;
276 static Object
*MUIDebug
,*MUIEcho
,*MUISurround
,*MUIClipvol
,*MUICpu
,*MUIACTime
,*MUIScalemode
;
278 SIPTR
xget(Object
* obj
, ULONG attribute
)
282 get(obj
, attribute
, &x
);
286 static void GUINewSettings(void)
288 D(bug("[AHI:Prefs] %s()\n", __func__
);)
290 set(MUIUnit
,MUIA_Cycle_Entries
,Units
);
291 set(MUIUnit
,MUIA_Cycle_Active
,state
.UnitSelected
);
292 set(MUIDebug
, MUIA_Cycle_Active
, globalprefs
.ahigp_DebugLevel
);
293 set(MUIEcho
, MUIA_Cycle_Active
, (globalprefs
.ahigp_DisableEcho
? 2 : 0)|(globalprefs
.ahigp_FastEcho
? 1 : 0));
294 set(MUISurround
, MUIA_Cycle_Active
, globalprefs
.ahigp_DisableSurround
);
295 set(MUIClipvol
, MUIA_Cycle_Active
, globalprefs
.ahigp_ClipMasterVolume
);
296 set(MUICpu
, MUIA_Cycle_Active
, (globalprefs
.ahigp_MaxCPU
* 100 + 32768) >> 16);
297 set(MUIACTime
, MUIA_Cycle_Active
, (globalprefs
.ahigp_AntiClickTime
* 1000 + 32768) >> 16);
298 set(MUIScalemode
, MUIA_Cycle_Active
, globalprefs
.ahigp_ScaleMode
);
303 static void GUINewUnit(void)
305 D(bug("[AHI:Prefs] %s()\n", __func__
);)
307 DoMethod(MUIList
, MUIM_List_Clear
);
308 set(MUIList
, MUIA_List_Quiet
, TRUE
);
309 DoMethod(MUIList
, MUIM_List_Insert
, Modes
, -1, MUIV_List_Insert_Bottom
);
310 set(MUIList
, MUIA_List_Quiet
, FALSE
);
311 set(MUIList
, MUIA_List_Active
, state
.ModeSelected
!= ~0 ? state
.ModeSelected
: MUIV_List_Active_Off
);
315 static void GUINewMode(void)
319 char* arg1
= getRecord();
320 char* arg2
= getAuthor();
321 char* arg3
= getCopyright();
322 char* arg4
= getDriver();
323 char* arg5
= getVersion();
324 char* arg6
= getAnnotation();
326 D(bug("[AHI:Prefs] %s()\n", __func__
);)
328 buffer
= AllocVec( strlen( arg1
) +
339 sprintf( buffer
,"0x%08lx\n%s\n%s\n%s\nDevs:AHI/%s.audio\n%s\n%s",
340 (ULONG
)getAudioMode(),
348 set(MUIInfos
, MUIA_Text_Contents
, (IPTR
) buffer
);
353 Max
= max(state
.Frequencies
-1, 0);
354 Sel
= min(Max
, state
.FreqSelected
);
356 set(MUIFreq
, MUIA_Disabled
, Dis
);
359 set(MUIFreq
, MUIA_Numeric_Max
, Max
);
360 set(MUIFreq
, MUIA_Numeric_Value
, Sel
);
362 set(MUILFreq
, MUIA_Text_Contents
, (IPTR
) getFreq());
364 Max
= max(state
.Channels
, 0);
365 Sel
= min(Max
, state
.ChannelsSelected
);
366 Dis
= (Max
== 0 || Max
== 1) || state
.ChannelsDisabled
;
367 set(MUIChannels
, MUIA_Disabled
, Dis
);
370 set(MUIChannels
, MUIA_Numeric_Max
, Max
);
371 set(MUIChannels
, MUIA_Numeric_Value
, Sel
);
373 set(MUILChannels
, MUIA_Text_Contents
, (IPTR
) getChannels());
375 Max
= max(state
.OutVols
-1, 0);
376 Sel
= min(Max
, state
.OutVolSelected
);
378 set(MUIOutvol
, MUIA_Disabled
, Dis
);
381 set(MUIOutvol
, MUIA_Numeric_Max
, Max
);
382 set(MUIOutvol
, MUIA_Numeric_Value
, Sel
);
384 set(MUILOutvol
, MUIA_Text_Contents
, (IPTR
) getOutVol());
386 Max
= max(state
.MonVols
-1, 0);
387 Sel
= min(Max
, state
.MonVolSelected
);
389 set(MUIMonvol
, MUIA_Disabled
, Dis
);
392 set(MUIMonvol
, MUIA_Numeric_Max
, Max
);
393 set(MUIMonvol
, MUIA_Numeric_Value
, Sel
);
395 set(MUILMonvol
, MUIA_Text_Contents
, (IPTR
) getMonVol());
397 Max
= max(state
.Gains
-1, 0);
398 Sel
= min(Max
, state
.GainSelected
);
400 set(MUIGain
, MUIA_Disabled
, Dis
);
403 set(MUIGain
, MUIA_Numeric_Max
, Max
);
404 set(MUIGain
, MUIA_Numeric_Value
, Sel
);
406 set(MUILGain
, MUIA_Text_Contents
, (IPTR
) getGain());
408 Max
= max(state
.Inputs
-1, 0);
409 Sel
= min(Max
, state
.InputSelected
);
411 set(MUIInput
, MUIA_Disabled
, Dis
);
414 set(MUIInput
, MUIA_Numeric_Max
, Max
);
415 set(MUIInput
, MUIA_Numeric_Value
, Sel
);
417 set(MUILInput
, MUIA_Text_Contents
, (IPTR
) getInput());
419 Max
= max(state
.Outputs
-1, 0);
420 Sel
= min(Max
, state
.OutputSelected
);
422 set(MUIOutput
, MUIA_Disabled
, Dis
);
425 set(MUIOutput
, MUIA_Numeric_Max
, Max
);
426 set(MUIOutput
, MUIA_Numeric_Value
, Sel
);
428 set(MUILOutput
, MUIA_Text_Contents
, (IPTR
) getOutput());
431 set(MUIPlay
, MUIA_Disabled
, getAudioMode() == AHI_INVALID_ID
);
435 SliderHookFunc( struct Hook
*hook
,
439 D(bug("[AHI:Prefs] %s()\n", __func__
);)
443 state
.FreqSelected
= (LONG
)(IPTR
)(*arg
);
444 set(MUILFreq
, MUIA_Text_Contents
, (IPTR
) getFreq());
446 else if(obj
== MUIChannels
)
448 state
.ChannelsSelected
= (LONG
)(IPTR
)(*arg
);
449 set(MUILChannels
, MUIA_Text_Contents
, (IPTR
) getChannels());
451 else if(obj
== MUIOutvol
)
453 state
.OutVolSelected
= (LONG
)(IPTR
)(*arg
);
454 set(MUILOutvol
, MUIA_Text_Contents
, (IPTR
) getOutVol());
456 else if(obj
== MUIMonvol
)
458 state
.MonVolSelected
= (LONG
)(IPTR
)(*arg
);
459 set(MUILMonvol
, MUIA_Text_Contents
, (IPTR
) getMonVol());
461 else if(obj
== MUIGain
)
463 state
.GainSelected
= (LONG
)(IPTR
)(*arg
);
464 set(MUILGain
, MUIA_Text_Contents
, (IPTR
) getGain());
466 else if(obj
== MUIInput
)
468 state
.InputSelected
= (LONG
)(IPTR
)(*arg
);
469 set(MUILInput
, MUIA_Text_Contents
, (IPTR
) getInput());
471 else if(obj
== MUIOutput
)
473 state
.OutputSelected
= (LONG
)(IPTR
)(*arg
);
474 set(MUILOutput
, MUIA_Text_Contents
, (IPTR
) getOutput());
478 static struct Hook hookSlider
=
482 (HOOKFUNC
) SliderHookFunc
,
486 /******************************************************************************
487 **** Call to open the window **************************************************
488 ******************************************************************************/
490 static Object
*MUIApp
,*MUIMenu
;
492 static Object
* SpecialLabel(STRPTR label
)
494 D(bug("[AHI:Prefs] %s()\n", __func__
);)
497 MUIA_HorizWeight
, 75,
498 MUIA_Text_Contents
, label
,
499 MUIA_Text_PreParse
, "\33l",
503 static Object
* SpecialButton(STRPTR label
)
505 Object
*button
= NULL
;
508 D(bug("[AHI:Prefs] %s()\n", __func__
);)
510 lab
= AllocVec(strlen(label
)+1,0);
522 ctrlchar
= ToLower(*label
);
530 MUIA_Text_Contents
, lab
,
531 MUIA_Text_PreParse
, "\33r",
532 MUIA_Text_HiChar
, ctrlchar
,
533 MUIA_ControlChar
, ctrlchar
,
534 MUIA_InputMode
, MUIV_InputMode_RelVerify
,
535 MUIA_ShowSelState
, FALSE
,
542 static Object
* SpecialSlider(LONG min
, LONG max
, LONG value
)
544 D(bug("[AHI:Prefs] %s()\n", __func__
);)
548 MUIA_Slider_Quiet
, TRUE
,
549 MUIA_Numeric_Min
, min
,
550 MUIA_Numeric_Max
, max
>= min
? max
: min
,
551 MUIA_Numeric_Value
, value
>= min
&& value
<=max
? value
: min
,
552 MUIA_Numeric_Format
, "",
556 BOOL
BuildGUI(char *screenname
)
558 Object
*MUISave
, *MUIUse
, *MUICancel
;
559 Object
*page1
,*page2
;
560 Object
*MUITFreq
,*MUITChannels
,*MUITOutvol
,*MUITMonvol
,*MUITGain
,*MUITInput
,*MUITOutput
,*MUITDebug
,*MUITEcho
,*MUITSurround
,*MUITClipvol
,*MUITCpu
,*MUITACTime
,*MUITScalemode
;
562 D(bug("[AHI:Prefs] %s()\n", __func__
);)
566 MUIMasterBase
= (void *)OpenLibrary("muimaster.library", MUIMASTER_VLATEST
);
567 if(MUIMasterBase
== NULL
)
569 Printf((char *) msgTextNoOpen
, "muimaster.library", MUIMASTER_VLATEST
);
575 IMUIMaster
= (struct MUIMasterIFace
*) GetInterface(MUIMasterBase
, "main", 1, NULL
);
576 if(IMUIMaster
== NULL
)
578 Printf((char *) msgTextNoOpen
, "MUIMaster main interface", 1);
580 CloseLibrary((struct Library
*) MUIMasterBase
);
587 Child
, MUIUnit
= CycleObject
,
589 MUIA_Cycle_Entries
, Units
,
590 MUIA_Cycle_Active
, state
.UnitSelected
,
592 Child
, ListviewObject
,
594 MUIA_Listview_List
, MUIList
= ListObject
,
596 MUIA_List_AutoVisible
, TRUE
,
601 MUIA_Background
, MUII_TextBack
,
603 MUIA_Text_Contents
, msgProperties
,
604 MUIA_Text_SetMax
, TRUE
,
606 Child
, MUIInfos
= TextObject
,
607 MUIA_Text_Contents
, "\n\n\n\n\n\n",
608 MUIA_Text_SetMin
, FALSE
,
612 Child
, BalanceObject
,
617 GroupFrameT(msgOptions
),
618 Child
, MUITFreq
= SpecialButton((STRPTR
)msgOptFrequency
),
619 Child
, MUIFreq
= SpecialSlider(0,max(state
.Frequencies
-1,0),state
.FreqSelected
),
620 Child
, MUILFreq
= SpecialLabel(getFreq()),
621 Child
, MUITChannels
= SpecialButton((STRPTR
)msgOptChannels
),
622 Child
, MUIChannels
= SpecialSlider(1,state
.Channels
,state
.ChannelsSelected
),
623 Child
, MUILChannels
= SpecialLabel(getChannels()),
624 Child
, MUITOutvol
= SpecialButton((STRPTR
)msgOptVolume
),
625 Child
, MUIOutvol
= SpecialSlider(0,max(state
.OutVols
-1,0),state
.OutVolSelected
),
626 Child
, MUILOutvol
= SpecialLabel(getOutVol()),
627 Child
, MUITMonvol
= SpecialButton((STRPTR
)msgOptMonitor
),
628 Child
, MUIMonvol
= SpecialSlider(0,max(state
.MonVols
-1,1),state
.MonVolSelected
),
629 Child
, MUILMonvol
= SpecialLabel(getMonVol()),
630 Child
, MUITGain
= SpecialButton((STRPTR
)msgOptGain
),
631 Child
, MUIGain
= SpecialSlider(0,max(state
.Gains
-1,0),state
.GainSelected
),
632 Child
, MUILGain
= SpecialLabel(getGain()),
633 Child
, MUITInput
= SpecialButton((STRPTR
)msgOptInput
),
634 Child
, MUIInput
= SpecialSlider(0,max(state
.Inputs
-1,0),state
.InputSelected
),
635 Child
, MUILInput
= SpecialLabel(getInput()),
636 Child
, MUITOutput
= SpecialButton((STRPTR
)msgOptOutput
),
637 Child
, MUIOutput
= SpecialSlider(0,max(state
.Outputs
-1,0),state
.OutputSelected
),
638 Child
, MUILOutput
= SpecialLabel(getOutput()),
640 Child
, MUIPlay
= SimpleButton(msgButtonPlay
),
650 GroupFrameT(msgGlobalOptions
),
651 Child
, MUITDebug
= SpecialButton((STRPTR
)msgGlobOptDebugLevel
),
652 Child
, MUIDebug
= CycleObject
,
654 MUIA_Cycle_Entries
, DebugLabels
,
655 MUIA_Cycle_Active
, globalprefs
.ahigp_DebugLevel
,
657 Child
, MUITEcho
= SpecialButton((STRPTR
)msgGlobOptEcho
),
658 Child
, MUIEcho
= CycleObject
,
660 MUIA_Cycle_Entries
, EchoLabels
,
661 MUIA_Cycle_Active
, (globalprefs
.ahigp_DisableEcho
? 2 : 0) | (globalprefs
.ahigp_FastEcho
? 1 : 0),
662 MUIA_Disabled
, AHIBase
->lib_Version
>= 5,
664 Child
, MUITSurround
= SpecialButton((STRPTR
)msgGlobOptSurround
),
665 Child
, MUISurround
= CycleObject
,
667 MUIA_Cycle_Entries
, SurroundLabels
,
668 MUIA_Cycle_Active
, globalprefs
.ahigp_DisableSurround
,
669 MUIA_Disabled
, AHIBase
->lib_Version
>= 5,
671 Child
, MUITClipvol
= SpecialButton((STRPTR
)msgGlobOptMasterVol
),
672 Child
, MUIClipvol
= CycleObject
,
674 MUIA_Cycle_Entries
, ClipMVLabels
,
675 MUIA_Cycle_Active
, globalprefs
.ahigp_ClipMasterVolume
,
676 MUIA_Disabled
, AHIBase
->lib_Version
>= 5,
678 Child
, MUITCpu
= SpecialButton((STRPTR
)msgGlobOptCPULimit
),
679 Child
, MUICpu
= SliderObject
,
681 MUIA_Slider_Horiz
, TRUE
,
683 MUIA_Numeric_Max
, 100,
684 MUIA_Numeric_Value
,(globalprefs
.ahigp_MaxCPU
* 100 + 32768) / 65536,
685 MUIA_Numeric_Format
,msgPercentFmt
,
687 Child
, MUITACTime
= SpecialButton((STRPTR
)msgGlobOptACTime
),
688 Child
, MUIACTime
= SliderObject
,
690 MUIA_Slider_Horiz
, TRUE
,
692 MUIA_Numeric_Max
, 100,
693 MUIA_Numeric_Value
,(globalprefs
.ahigp_AntiClickTime
* 1000 + 32768) >> 16,
694 MUIA_Numeric_Format
,msgACTimeFmt
,
695 MUIA_Disabled
, AHIBase
->lib_Version
<= 4,
697 Child
, MUITScalemode
= SpecialButton((STRPTR
)msgOptScalemode
),
698 Child
, MUIScalemode
= CycleObject
,
700 MUIA_Cycle_Entries
, ScaleLabels
,
701 MUIA_Cycle_Active
, globalprefs
.ahigp_ScaleMode
,
702 MUIA_Disabled
, AHIBase
->lib_Version
<= 4,
710 MUIApp
= ApplicationObject
,
711 MUIA_Application_Title
, (IPTR
) msgTextProgramName
,
712 MUIA_Application_Version
, Version
,
713 MUIA_Application_Copyright
, (IPTR
) "©1996-2005 Martin Blom",
714 MUIA_Application_Author
, (IPTR
) "Stéphane Barbaray/Martin Blom",
715 MUIA_Application_Description
, (IPTR
) msgTextProgramName
,
716 MUIA_Application_Base
, (IPTR
) "AHI",
717 MUIA_Application_HelpFile
, HELPFILE
,
718 MUIA_Application_Menustrip
, MUIMenu
= MUI_MakeObject(MUIO_MenustripNM
,Menus
,0),
719 MUIA_Application_SingleTask
, TRUE
,
720 SubWindow
, MUIWindow
= WindowObject
,
721 MUIA_Window_Title
, (IPTR
) msgTextProgramName
,
722 MUIA_Window_ID
, MAKE_ID('M','A','I','N'),
723 MUIA_HelpNode
, (IPTR
) "AHI",
724 WindowContents
, VGroup
,
725 Child
, RegisterGroup(PageNames
),
731 Child
, MUISave
= ImageButton(msgButtonSave
, "THEME:Images/Gadgets/Save"),
732 Child
, MUIUse
= ImageButton(msgButtonUse
,"THEME:Images/Gadgets/Use"),
733 Child
, MUICancel
= ImageButton(msgButtonCancel
,"THEME:Images/Gadgets/Cancel"),
741 APTR item
= (APTR
)DoMethod(MUIMenu
,MUIM_FindUData
,ACTID_ICONS
);
744 set(item
, MUIA_Menuitem_Checked
, SaveIcons
);
746 DoMethod(MUIWindow
, MUIM_MultiSet
, MUIA_Text_PreParse
,"\033l",MUILFreq
,MUILChannels
,MUILOutvol
,MUILMonvol
,MUILGain
,MUILInput
,MUILOutput
,NULL
);
747 DoMethod(MUIWindow
, MUIM_MultiSet
, MUIA_CycleChain
, 1, MUISave
,MUIUse
,MUICancel
,NULL
);
749 DoMethod(MUITFreq
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIFreq
);
750 DoMethod(MUITChannels
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIChannels
);
751 DoMethod(MUITOutvol
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIOutvol
);
752 DoMethod(MUITMonvol
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIMonvol
);
753 DoMethod(MUITGain
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIGain
);
754 DoMethod(MUITInput
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIInput
);
755 DoMethod(MUITOutput
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIOutput
);
756 DoMethod(MUIPlay
, MUIM_Notify
, MUIA_Pressed
, FALSE
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_PLAY
);
757 DoMethod(MUITDebug
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIDebug
);
758 DoMethod(MUITEcho
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIEcho
);
759 DoMethod(MUITSurround
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUISurround
);
760 DoMethod(MUITClipvol
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIClipvol
);
761 DoMethod(MUITCpu
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUICpu
);
762 DoMethod(MUITACTime
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIACTime
);
763 DoMethod(MUITScalemode
, MUIM_Notify
, MUIA_Pressed
, TRUE
, MUIWindow
, 3, MUIM_Set
, MUIA_Window_ActiveObject
, MUIScalemode
);
765 DoMethod(MUIWindow
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
, MUIApp
, 2, MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
);
766 DoMethod(MUISave
, MUIM_Notify
, MUIA_Pressed
, FALSE
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_SAVE
);
767 DoMethod(MUIUse
, MUIM_Notify
, MUIA_Pressed
, FALSE
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_USE
);
768 DoMethod(MUICancel
, MUIM_Notify
, MUIA_Pressed
, FALSE
, MUIApp
, 2, MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
);
769 DoMethod(MUIUnit
, MUIM_Notify
, MUIA_Cycle_Active
, MUIV_EveryTime
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_UNIT
);
770 DoMethod(MUIList
, MUIM_Notify
, MUIA_List_Active
, MUIV_EveryTime
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_MODE
);
771 DoMethod(MUIDebug
, MUIM_Notify
, MUIA_Cycle_Active
, MUIV_EveryTime
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_DEBUG
);
772 DoMethod(MUISurround
, MUIM_Notify
, MUIA_Cycle_Active
, MUIV_EveryTime
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_SURROUND
);
773 DoMethod(MUIEcho
, MUIM_Notify
, MUIA_Cycle_Active
, MUIV_EveryTime
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_ECHO
);
774 DoMethod(MUICpu
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_CPULIMIT
);
775 DoMethod(MUIClipvol
, MUIM_Notify
, MUIA_Cycle_Active
, MUIV_EveryTime
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_CLIPMV
);
776 DoMethod(MUIACTime
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_ACTIME
);
777 DoMethod(MUIScalemode
, MUIM_Notify
, MUIA_Cycle_Active
, MUIV_EveryTime
, MUIApp
, 2, MUIM_Application_ReturnID
, ACTID_SCALEMODE
);
778 DoMethod(MUIFreq
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, MUIV_Notify_Self
, 3, MUIM_CallHook
, &hookSlider
, MUIV_TriggerValue
);
779 DoMethod(MUIChannels
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, MUIV_Notify_Self
, 3, MUIM_CallHook
, &hookSlider
, MUIV_TriggerValue
);
780 DoMethod(MUIOutvol
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, MUIV_Notify_Self
, 3, MUIM_CallHook
, &hookSlider
, MUIV_TriggerValue
);
781 DoMethod(MUIMonvol
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, MUIV_Notify_Self
, 3, MUIM_CallHook
, &hookSlider
, MUIV_TriggerValue
);
782 DoMethod(MUIGain
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, MUIV_Notify_Self
, 3, MUIM_CallHook
, &hookSlider
, MUIV_TriggerValue
);
783 DoMethod(MUIInput
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, MUIV_Notify_Self
, 3, MUIM_CallHook
, &hookSlider
, MUIV_TriggerValue
);
784 DoMethod(MUIOutput
, MUIM_Notify
, MUIA_Numeric_Value
, MUIV_EveryTime
, MUIV_Notify_Self
, 3, MUIM_CallHook
, &hookSlider
, MUIV_TriggerValue
);
785 set(MUIWindow
, MUIA_Window_Open
, TRUE
);
792 /******************************************************************************
793 **** Call to close the window *************************************************
794 ******************************************************************************/
798 D(bug("[AHI:Prefs] %s()\n", __func__
);)
801 MUI_DisposeObject(MUIApp
);
803 CloseLibrary(MUIMasterBase
);
805 DropInterface((struct Interface
*) IMUIMaster
);
810 /******************************************************************************
811 **** Handles the input events *************************************************
812 ******************************************************************************/
818 D(bug("[AHI:Prefs] %s()\n", __func__
);)
822 IPTR rc
= DoMethod(MUIApp
, MUIM_Application_NewInput
, &sigs
);
826 case MUIV_Application_ReturnID_Quit
:
831 struct FileRequester
*request
;
833 request
= MUI_AllocAslRequestTags(ASL_FileRequest
,
834 ASLFR_Window
, xget(MUIWindow
, MUIA_Window_Window
),
835 ASLFR_TitleText
, msgTextProgramName
,
836 ASLFR_RejectIcons
, TRUE
,
837 ASLFR_InitialDrawer
, (IPTR
)"SYS:Prefs/Presets",
840 if( request
!= NULL
)
842 DoMethod(MUIApp
, MUIA_Application_Sleep
, TRUE
);
843 if (MUI_AslRequest(request
, NULL
))
847 DoMethod(MUIApp
, MUIA_Application_Sleep
, FALSE
);
849 file
= AllocVec(strlen(request
->fr_Drawer
)+128,0);
853 CopyMem(request
->fr_Drawer
, file
, strlen(request
->fr_Drawer
)+1);
854 AddPart(file
, request
->fr_File
, 128);
862 DoMethod(MUIApp
, MUIA_Application_Sleep
, FALSE
);
864 MUI_FreeAslRequest(request
);
871 struct FileRequester
*request
;
873 request
= MUI_AllocAslRequestTags(ASL_FileRequest
,
874 ASLFR_Window
, xget(MUIWindow
, MUIA_Window_Window
),
875 ASLFR_TitleText
, msgTextProgramName
,
876 ASLFR_RejectIcons
, TRUE
,
877 ASLFR_DoSaveMode
, TRUE
,
878 ASLFR_InitialDrawer
, (IPTR
)"SYS:Prefs/Presets",
883 DoMethod(MUIApp
, MUIA_Application_Sleep
, TRUE
);
885 if (MUI_AslRequest(request
, NULL
))
889 DoMethod(MUIApp
, MUIA_Application_Sleep
, FALSE
);
891 file
= AllocVec(strlen(request
->fr_Drawer
)+128,0);
895 CopyMem(request
->fr_Drawer
, file
, strlen(request
->fr_Drawer
)+1);
896 AddPart(file
, request
->fr_File
, 128);
897 SaveSettings(file
, UnitList
);
907 DoMethod(MUIApp
, MUIA_Application_Sleep
, FALSE
);
909 MUI_FreeAslRequest(request
);
916 char* args
[] = { "\033c",
917 (char*)msgTextProgramName
,
918 "1996-2005 Stéphane Barbaray/Martin Blom"
921 MUI_RequestA(MUIApp
, MUIWindow
, 0, (char *) msgTextProgramName
,
922 (char*)msgButtonOK
, (char*)msgTextCopyright
, args
);
928 SaveSettings(ENVFILE
, UnitList
);
929 SaveSettings(ENVARCFILE
, UnitList
);
934 SaveSettings(ENVFILE
, UnitList
);
945 case ACTID_LASTSAVED
:
946 NewSettings(ENVARCFILE
);
951 NewSettings(args
.from
);
957 APTR item
= (APTR
)DoMethod(MUIMenu
,MUIM_FindUData
,ACTID_ICONS
);
961 if(xget(item
, MUIA_Menuitem_Checked
))
974 DoMethod(MUIApp
,MUIM_Application_ShowHelp
,NULL
,NULL
,"AHI",0);
978 DoMethod(MUIApp
,MUIM_Application_ShowHelp
,NULL
,NULL
,"MAIN",0);
981 case ACTID_HELPINDEX
:
982 DoMethod(MUIApp
,MUIM_Application_ShowHelp
,NULL
,NULL
,"Concept Index",0);
987 NewUnit(xget(MUIUnit
,MUIA_Cycle_Active
));
993 NewMode(xget(MUIList
, MUIA_List_Active
));
1000 struct UnitNode
* unit
;
1003 unit_id
= xget( MUIUnit
, MUIA_Cycle_Active
);
1004 unit
= (struct UnitNode
*) GetNode( unit_id
, UnitList
);
1006 PlaySound( &unit
->prefs
);
1011 case ACTID_SURROUND
:
1013 case ACTID_CPULIMIT
:
1016 case ACTID_SCALEMODE
:
1018 IPTR debug
= AHI_DEBUG_NONE
, surround
= FALSE
, echo
= 0, cpu
= 90;
1019 IPTR clip
= FALSE
, actime
= 0, scalemode
= AHI_SCALE_FIXED_0_DB
;
1021 get(MUIDebug
, MUIA_Cycle_Active
, &debug
);
1022 get(MUISurround
, MUIA_Cycle_Active
, &surround
);
1023 get(MUIEcho
, MUIA_Cycle_Active
, &echo
);
1024 get(MUIClipvol
, MUIA_Cycle_Active
, &clip
);
1025 get(MUICpu
, MUIA_Numeric_Value
, &cpu
);
1026 get(MUIACTime
, MUIA_Numeric_Value
, &actime
);
1027 get(MUIScalemode
, MUIA_Cycle_Active
, &scalemode
);
1029 globalprefs
.ahigp_DebugLevel
= debug
;
1030 globalprefs
.ahigp_DisableSurround
= surround
;
1031 globalprefs
.ahigp_DisableEcho
= (echo
== 2);
1032 globalprefs
.ahigp_FastEcho
= (echo
== 1);
1033 globalprefs
.ahigp_MaxCPU
= ((cpu
<< 16) + 50) / 100;
1034 globalprefs
.ahigp_ClipMasterVolume
= clip
;
1035 globalprefs
.ahigp_AntiClickTime
= ((actime
<< 16) + 500) / 1000;
1036 globalprefs
.ahigp_ScaleMode
= scalemode
;
1044 sigs
= Wait(sigs
| SIGBREAKF_CTRL_C
);
1045 if (sigs
& SIGBREAKF_CTRL_C
)