4 ** Copyright (C) 1994,95,96 Bernardo Innocenti
6 ** Song optimization panel.
10 #include <intuition/intuition.h>
11 #include <intuition/gadgetclass.h>
12 #include <libraries/gadtools.h>
14 #include <proto/exec.h>
15 #include <proto/intuition.h>
16 #include <proto/gadtools.h>
17 #include <proto/xmodule.h>
19 #include "XModulePriv.h"
24 /* Local functions prototypes */
26 static void OptPerformClicked (struct WinUserData *wud);
34 GD_OptimizationGroup0,
35 GD_OptimizationGroup1,
52 XDEF struct OptSwitches OptSwitches = { 1, 1, 1, 1, 1, 1, 0, 0 };
57 static ULONG OptimizationArgs[] =
59 VGROUP_KIND, BBFT_RIDGE,
60 CHECKBOX_KIND, NULL, MSG_REM_UNUSED_PATTS_GAD, (ULONG)&OptSwitches.RemPatts, TAG_DONE,
61 CHECKBOX_KIND, NULL, MSG_REM_DUPLICATE_PATTS_GAD,(ULONG)&OptSwitches.RemDupPatts, TAG_DONE,
62 CHECKBOX_KIND, NULL, MSG_REM_UNUSED_INSTR_GAD, (ULONG)&OptSwitches.RemInstr, TAG_DONE,
63 CHECKBOX_KIND, NULL, MSG_REM_DUP_INSTR_GAD, (ULONG)&OptSwitches.RemDupInstr, TAG_DONE,
64 CHECKBOX_KIND, NULL, MSG_CUT_AFTER_LOOP_GAD, (ULONG)&OptSwitches.CutAfterLoop, TAG_DONE,
65 CHECKBOX_KIND, NULL, MSG_CUT_ZERO_TAILS_GAD, (ULONG)&OptSwitches.CutZeroTail, TAG_DONE,
66 CHECKBOX_KIND, NULL, MSG_CUT_PATTERNS_GAD, (ULONG)&OptSwitches.CutPatts, TAG_DONE,
67 CHECKBOX_KIND, NULL, MSG_REMAP_INSTRUMENTS_GAD, (ULONG)&OptSwitches.RemapInstr, TAG_DONE,
69 BUTTON_KIND, (ULONG)OptPerformClicked, MSG_OPTIMIZE_GAD, TAG_DONE,
75 XDEF LONG OptimizationWinTags[] =
77 XMWIN_LayoutArgs, (LONG)OptimizationArgs,
78 XMWIN_GCount, Optimization_CNT,
79 XMWIN_Title, MSG_OPTIMIZATION_TITLE,
80 XMWIN_WindowFlags, WFLG_CLOSEGADGET,
81 XMWIN_IDCMPFlags, CHECKBOXIDCMP | BUTTONIDCMP | IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW,
82 XMWIN_HelpNode, (LONG)"Optimization",
88 GLOBALCALL void UpdateOptSwitches (void)
90 struct WinUserData *wud = WDescr[WID_OPTIMIZATION].Wud;
94 GD_RemPatts, OptSwitches.RemPatts,
95 GD_RemDupPatts, OptSwitches.RemDupPatts,
96 GD_RemInstr, OptSwitches.RemInstr,
97 GD_RemDupInstr, OptSwitches.RemDupInstr,
98 GD_CutAfterLoop, OptSwitches.CutAfterLoop,
99 GD_CutZeroTail, OptSwitches.CutZeroTail,
100 GD_CutPatterns, OptSwitches.CutPatts,
101 GD_RemapInstr, OptSwitches.RemapInstr,
107 /************************/
108 /* Optimization Gadgets */
109 /************************/
111 static void OptPerformClicked (struct WinUserData *wud)
114 ULONG oldsize, newsize;
116 if (si = xmLockActiveSong (SM_EXCLUSIVE))
118 oldsize = CalcSongSize (si);
120 xmProcessSong (si, NULL,
121 XMSNG_Optimize, XMOF_DEFAULT,
126 newsize = CalcSongSize (si);
128 ReleaseSemaphore (&si->Lock);
130 xmDisplayMessage (XMDMF_NOTE | XMDMF_USECATALOG, (STRPTR)MSG_SAVED_X_BYTES,
131 oldsize - newsize, ((oldsize - newsize) * 100) / oldsize );