1 #pragma once
2 
3 #include <stdint.h>
4 #include <stdbool.h>
5 #include "ft2_replayer.h"
6 #include "ft2_palette.h"
7 #include "ft2_cpu.h"
8 
9 #define CFG_ID_STR "FastTracker 2.0 configuration file\x1A"
10 #define CONFIG_FILE_SIZE 1736
11 
12 enum
13 {
14 	CONFIG_SCREEN_IO_DEVICES,
15 	CONFIG_SCREEN_LAYOUT,
16 	CONFIG_SCREEN_MISCELLANEOUS,
17 	CONFIG_SCREEN_MIDI_INPUT,
18 
19 	CONFIG_HIDE_ERRORS = 0,
20 	CONFIG_SHOW_ERRORS = 1,
21 
22 	INTERPOLATION_NONE = 0,
23 	INTERPOLATION_SINC = 1,
24 	INTERPOLATION_LINEAR = 2,
25 
26 	MOUSE_IDLE_SHAPE_NICE = 0,
27 	MOUSE_IDLE_SHAPE_UGLY = 1,
28 	MOUSE_IDLE_SHAPE_AWFUL = 2,
29 	MOUSE_IDLE_SHAPE_USABLE = 3,
30 	MOUSE_IDLE_TEXT_EDIT = 4,
31 
32 	MOUSE_BUSY_SHAPE_CLOCK = 0,
33 	MOUSE_BUSY_SHAPE_GLASS = 2,
34 
35 	MAX_CHANS_SHOWN_4 = 0,
36 	MAX_CHANS_SHOWN_6 = 1,
37 	MAX_CHANS_SHOWN_8 = 2,
38 	MAX_CHANS_SHOWN_12 = 3,
39 
40 	PATT_FONT_CAPITALS = 0,
41 	PATT_FONT_LOWERCASE = 1,
42 	PATT_FONT_FUTURE = 2,
43 	PATT_FONT_BOLD = 3,
44 
45 	PAL_ARCTIC = 0,
46 	PAL_AURORA_BOREALIS = 1,
47 	PAL_BLUES = 2,
48 	PAL_GOLD = 3,
49 	PAL_HEAVY_METAL = 4,
50 	PAL_JUNGLE = 5,
51 	PAL_LITHE_DARK = 6,
52 	PAL_ROSE = 7,
53 	PAL_DARK_MODE = 8,
54 	PAL_VIOLENT = 9,
55 	PAL_WHY_COLORS = 10, // default
56 	PAL_USER_DEFINED = 11,
57 
58 	FILESORT_EXT = 0,
59 	FILESORT_NAME = 1,
60 
61 	ONE_PLAYER = 0,
62 	TWO_PLAYERS = 1,
63 
64 	DIFFICULTY_NOVICE = 0,
65 	DIFFICULTY_AVERAGE = 1,
66 	DIFFICULTY_PRO = 2,
67 	DIFFICULTY_MANIAC = 3,
68 
69 	DONT_SHOW_IMPORT_WARNING_FLAG = 64,
70 	DONT_SHOW_NOT_YET_APPLIED_WARNING_FLAG = 32,
71 
72 	// specialFlags
73 	NO_VOLRAMP_FLAG = 1,
74 	BITDEPTH_16 = 2,
75 	BITDEPTH_32 = 4,
76 	BUFFSIZE_512 = 8,
77 	BUFFSIZE_1024 = 16,
78 	BUFFSIZE_2048 = 32,
79 	// 64 is free for use
80 	LINED_SCOPES = 128,
81 
82 	// specialFlags2
83 	DITHERED_AUDIO = 1, /* DEPRECATED */
84 	HARDWARE_MOUSE = 2,
85 	STRETCH_IMAGE = 4,
86 
87 	// windowFlags
88 	WINSIZE_AUTO = 1,
89 	WINSIZE_1X = 2,
90 	WINSIZE_2X = 4,
91 	WINSIZE_3X = 8,
92 	WINSIZE_4X = 16,
93 	PIXEL_FILTER = 32,
94 	FORCE_VSYNC_OFF = 64,
95 	START_IN_FULLSCR = 128,
96 };
97 
98 #ifdef _MSC_VER
99 #pragma pack(push)
100 #pragma pack(1)
101 #endif
102 typedef struct highScoreType_t
103 {
104 	uint8_t nameLen;
105 	char name[22];
106 	int32_t score;
107 	uint8_t level;
108 }
109 #ifdef __GNUC__
110 __attribute__ ((packed))
111 #endif
112 highScoreType;
113 
114 // this has some Swedish names, those variables are not used in our clone.
115 typedef struct config_t // exact FT2.CFG layout (with some modifications)
116 {
117 	char cfgID[35];
118 	uint16_t version;
119 	uint32_t audioFreq; // was "BIOSSum" (never used in FT2)
120 	int16_t utEnhet, masterVol, inputVol, inputDev;
121 	uint8_t interpolation, internMode, stereoMode;
122 	uint8_t specialFlags2; // was lo-byte of "sample16Bit" (was used for external audio sampling)
123 	uint8_t dontShowAgainFlags; // was hi-byte of "sample16Bit" (was used for external audio sampling)
124 	int16_t inEnhet, sbPort, sbDMA, sbHiDMA, sbInt, sbOutFilter;
125 	uint8_t true16Bit, ptnStretch, ptnHex, ptnInstrZero, ptnFrmWrk, ptnLineLight, ptnShowVolColumn, ptnChnNumbers;
126 	int16_t ptnLineLightStep, ptnFont, ptnAcc;
127 	pal16 userPal[16];
128 	uint16_t comMacro[10], volMacro[10];
129 	uint8_t multiRec, multiKeyJazz, multiEdit, multiRecChn[32], recRelease, recQuant;
130 	int16_t recQuantRes;
131 	uint8_t recTrueInsert;
132 	int16_t recMIDIChn;
133 	uint8_t recMIDIAllChn, recMIDITransp;
134 	int16_t recMIDITranspVal;
135 	uint8_t recMIDIVelocity, recMIDIAftert;
136 	int16_t recMIDIVolSens;
137 	uint8_t recMIDIAllowPC, smpCutToBuffer, ptnCutToBuffer, killNotesOnStopPlay;
138 	uint8_t specialFlags; // was lo-byte of "ptnDefaultLen" (never used in FT2)
139 	uint8_t windowFlags; // was hi-byte of "ptnDefaultLen" (never used in FT2)
140 	uint8_t modulesPathLen;
141 	char modulesPath[79+1];
142 	uint8_t instrPathLen;
143 	char instrPath[79+1];
144 	uint8_t samplesPathLen;
145 	char samplesPath[79+1];
146 	uint8_t patternsPathLen;
147 	char patternsPath[79+1];
148 	uint8_t tracksPathLen;
149 	char tracksPath[79+1];
150 	uint8_t id_FastLogo, id_TritonProd;
151 	int16_t cfg_StdPalNum;
152 	uint8_t cfg_AutoSave;
153 	int16_t smpEd_SampleNote;
154 	highScoreType NI_HighScore[10];
155 	int16_t NI_NumPlayers, NI_Speed;
156 	uint8_t NI_Surround, NI_Grid, NI_Wrap;
157 	int32_t NI_HighScoreChecksum;
158 	int16_t mouseType, mouseAnimType, mouseSpeed, keyLayout, boostLevel, stdEnvPoints[6][2][12][2];
159 	uint16_t stdVolEnvLength[6], stdVolEnvSustain[6], stdVolEnvLoopStart[6], stdVolEnvLoopEnd[6];
160 	uint16_t stdPanEnvLength[6], stdPanEnvSustain[6], stdPanEnvLoopStart[6], stdPanEnvLoopEnd[6];
161 	uint16_t stdFadeout[6], stdVibRate[6], stdVibDepth[6], stdVibSweep[6], stdVibType[6];
162 	uint16_t stdVolEnvFlags[6], stdPanEnvFlags[6];
163 	int16_t antStars, ptnMaxChannels;
164 	uint16_t sampleRates[16];
165 	uint8_t cfg_OverwriteWarning;
166 	int16_t cfg_SortPriority, cfg_DPMIMemLimit;
167 	uint8_t cfg_DPMIMemLimitEnabled;
168 	uint8_t audioInputFreq; // was "cdr_Sync"
169 }
170 #ifdef __GNUC__
171 __attribute__ ((packed))
172 #endif
173 config_t;
174 
175 #ifdef _MSC_VER
176 #pragma pack(pop)
177 #endif
178 
179 void resetConfig(void);
180 bool loadConfig(bool showErrorFlag);
181 void loadConfig2(void); // called by "Load config" button
182 bool saveConfig(bool showErrorFlag);
183 void saveConfig2(void); // called by "Save config" button
184 void loadConfigOrSetDefaults(void);
185 void showConfigScreen(void);
186 void hideConfigScreen(void);
187 void exitConfigScreen(void);
188 void setConfigIORadioButtonStates(void);
189 void configToggleImportWarning(void);
190 void configToggleNotYetAppliedWarning(void);
191 void drawAudioOutputList(void);
192 void drawAudioInputList(void);
193 void configAmpDown(void);
194 void configAmpUp(void);
195 void configMasterVolDown(void);
196 void configMasterVolUp(void);
197 void configQuantizeUp(void);
198 void configQuantizeDown(void);
199 void configMIDIChnUp(void);
200 void configMIDIChnDown(void);
201 void configMIDITransUp(void);
202 void configMIDITransDown(void);
203 void configMIDISensDown(void);
204 void configMIDISensUp(void);
205 void rbConfigIODevices(void);
206 void rbConfigLayout(void);
207 void rbConfigMiscellaneous(void);
208 #ifdef HAS_MIDI
209 void rbConfigMidiInput(void);
210 #endif
211 void rbConfigSbs512(void);
212 void rbConfigSbs1024(void);
213 void rbConfigSbs2048(void);
214 void rbConfigAudio16bit(void);
215 void rbConfigAudio24bit(void);
216 void rbConfigAudioIntrpNone(void);
217 void rbConfigAudioIntrpLinear(void);
218 void rbConfigAudioIntrpSinc(void);
219 void rbConfigAudio44kHz(void);
220 void rbConfigAudio48kHz(void);
221 #if CPU_64BIT
222 void rbConfigAudio96kHz(void);
223 void rbConfigAudio192kHz(void);
224 #endif
225 void rbConfigAudioInput44kHz(void);
226 void rbConfigAudioInput48kHz(void);
227 void rbConfigAudioInput96kHz(void);
228 void rbConfigFreqTableAmiga(void);
229 void rbConfigFreqTableLinear(void);
230 void rbConfigMouseNice(void);
231 void rbConfigMouseUgly(void);
232 void rbConfigMouseAwful(void);
233 void rbConfigMouseUsable(void);
234 void rbConfigScopeStandard(void);
235 void rbConfigMouseBusyVogue(void);
236 void rbConfigMouseBusyMrH(void);
237 void rbConfigScopeLined(void);
238 void rbConfigPatt4Chans(void);
239 void rbConfigPatt6Chans(void);
240 void rbConfigPatt8Chans(void);
241 void rbConfigPatt12Chans(void);
242 void rbConfigFontCapitals(void);
243 void rbConfigFontLowerCase(void);
244 void rbConfigFontFuture(void);
245 void rbConfigFontBold(void);
246 void rbFileSortExt(void);
247 void rbFileSortName(void);
248 void rbWinSizeAuto(void);
249 void rbWinSize1x(void);
250 void rbWinSize2x(void);
251 void rbWinSize3x(void);
252 void rbWinSize4x(void);
253 void cbToggleAutoSaveConfig(void);
254 void cbConfigVolRamp(void);
255 void cbConfigPattStretch(void);
256 void cbConfigHexCount(void);
257 void cbConfigAccidential(void);
258 void cbConfigShowZeroes(void);
259 void cbConfigFramework(void);
260 void cbConfigLineColors(void);
261 void cbConfigChanNums(void);
262 void cbConfigShowVolCol(void);
263 void cbSoftwareMouse(void);
264 void cbSampCutToBuff(void);
265 void cbPattCutToBuff(void);
266 void cbKillNotesAtStop(void);
267 void cbFileOverwriteWarn(void);
268 void cbMultiChanRec(void);
269 void cbMultiChanKeyJazz(void);
270 void cbMultiChanEdit(void);
271 void cbRecKeyOff(void);
272 void cbQuantization(void);
273 void cbChangePattLenInsDel(void);
274 void cbMIDIAllowPC(void);
275 void cbMIDIEnable(void);
276 void cbMIDIRecTransp(void);
277 void cbMIDIRecAllChn(void);
278 void cbMIDIRecVelocity(void);
279 void cbMIDIRecAftert(void);
280 void cbVsyncOff(void);
281 void cbFullScreen(void);
282 void cbPixelFilter(void);
283 void cbStretchImage(void);
284 void sbAmp(uint32_t pos);
285 void sbMasterVol(uint32_t pos);
286 void sbMIDISens(uint32_t pos);
287 
288 extern config_t config;
289