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