Olav SørensenPushed v1.62 code4188e803 years agoHistory
282 lines · 8.9 KB · C
RawDownload
#pragma once #ifdef _WIN32#define WIN32_MEAN_AND_LEAN#include <windows.h>#endif #include <stdint.h>#include <stdbool.h>#include "pt2_header.h"#include "pt2_hpc.h"#include "pt2_paula.h" // for .WAV sample loading/savingtypedef struct wavHeader_t{	uint32_t chunkID, chunkSize, format, subchunk1ID, subchunk1Size;	uint16_t audioFormat, numChannels;	uint32_t sampleRate, byteRate;	uint16_t blockAlign, bitsPerSample;	uint32_t subchunk2ID, subchunk2Size;} wavHeader_t; typedef struct sampleLoop_t{	uint32_t dwIdentifier, dwType, dwStart;	uint32_t dwEnd, dwFraction, dwPlayCount;} sampleLoop_t; typedef struct samplerChunk_t{	uint32_t chunkID, chunkSize, dwManufacturer, dwProduct;	uint32_t dwSamplePeriod, dwMIDIUnityNote, wMIDIPitchFraction;	uint32_t dwSMPTEFormat, dwSMPTEOffset, cSampleLoops, cbSamplerData;	sampleLoop_t loop;} samplerChunk_t; typedef struct mptExtraChunk_t{	uint32_t chunkID, chunkSize, flags;	uint16_t defaultPan, defaultVolume, globalVolume, reserved;	uint8_t vibratoType, vibratoSweep, vibratoDepth, vibratoRate;} mptExtraChunk_t;// ----------------------------------------- typedef struct note_t{	uint8_t param, sample, command;	uint16_t period;} note_t; typedef struct moduleHeader_t{	char name[20 + 1];	uint16_t patternTable[128], songLength;	uint16_t initialTempo; // used for STK/UST modules after module is loaded} moduleHeader_t; typedef struct moduleSample_t{	volatile int8_t *volumeDisp;	volatile int32_t *lengthDisp, *loopStartDisp, *loopLengthDisp;	char text[22 + 1];	int8_t volume;	uint8_t fineTune;	int32_t offset, length, loopStart, loopLength;} moduleSample_t; typedef struct moduleChannel_t{	int8_t *n_start, *n_wavestart, *n_loopstart, n_volume, n_dmabit;	int8_t n_toneportdirec, n_pattpos, n_loopcount;	uint8_t n_wavecontrol, n_glissfunk, n_sampleoffset, n_toneportspeed;	uint8_t n_vibratocmd, n_tremolocmd, n_finetune, n_funkoffset, n_samplenum;	uint8_t n_vibratopos, n_tremolopos;	int16_t n_period, n_note, n_wantedperiod;	uint16_t n_cmd, n_length, n_replen;	uint32_t n_scopedelta, n_chanindex; 	// for pt2_sync.c	uint8_t syncFlags;	int8_t syncAnalyzerVolume, syncVuVolume;	uint16_t syncAnalyzerPeriod;} moduleChannel_t; typedef struct module_t{	bool loaded, modified;	int8_t *sampleData; 	volatile int32_t tick, speed; 	int8_t row; // used for different things, so must not be internal to replayer 	moduleHeader_t header;	moduleSample_t samples[MOD_SAMPLES];	moduleChannel_t channels[PAULA_VOICES];	note_t *patterns[MAX_PATTERNS]; 	// for pattern viewer	int8_t currRow;	int32_t currSpeed, currBPM;	uint16_t currPos, currPattern; 	// for MOD2WAV progress bar	uint32_t rowsCounter, rowsInTotal;} module_t; typedef struct keyb_t{	bool repeatKey, delayKey;	bool shiftPressed, leftCtrlPressed, leftAltPressed;	bool leftCommandPressed, leftAmigaPressed, keypadEnterPressed;	uint8_t repeatCounter, delayCounter;	uint64_t repeatFrac;	SDL_Scancode lastRepKey, lastKey;} keyb_t; typedef struct mouse_t{	volatile bool setPosFlag, updatePointerColorFlag;	bool buttonWaiting, leftButtonPressed, rightButtonPressed;	uint8_t repeatCounter, buttonWaitCounter;	int32_t rawX, rawY, x, y, lastMouseX, setPosX, setPosY, lastGUIButton, prevX, prevY;	int32_t lastSmpFilterButton, lastSamplingButton;	uint32_t buttonState;} mouse_t; typedef struct video_t{	bool fullscreen, vsync60HzPresent, windowHidden, useDesktopMouseCoords;	int32_t renderX, renderY, renderW, renderH, displayW, displayH;	int32_t xScale, yScale;	float fMouseXMul, fMouseYMul;	hpc_t vblankHpc;	SDL_PixelFormat *pixelFormat;	uint32_t *frameBuffer;	uint64_t amigaVblankDelta; // 0.52 fixed-point 	SDL_Window *window;	SDL_Renderer *renderer;	SDL_Texture  *texture; 	uint32_t palette[PALETTE_NUM]; #ifdef _WIN32	HWND hWnd;#endif} video_t; typedef struct editor_t{	volatile uint8_t vuMeterVolumes[PAULA_VOICES], spectrumVolumes[SPECTRUM_BAR_NUM];	volatile int8_t *sampleFromDisp, *sampleToDisp, *currSampleDisp, realVuMeterVolumes[PAULA_VOICES], mod2WavNumLoops, mod2WavFadeOutSeconds;	volatile bool songPlaying, programRunning, mod2WavOngoing, pat2SmpOngoing, mainLoopOngoing, abortMod2Wav, mod2WavFadeOut;	volatile uint16_t *quantizeValueDisp, *metroSpeedDisp, *metroChannelDisp, *sampleVolDisp;	volatile uint16_t *vol1Disp, *vol2Disp, *currEditPatternDisp, *currPosDisp, *currPatternDisp;	volatile uint16_t *currPosEdPattDisp, *currLengthDisp, *lpCutOffDisp, *hpCutOffDisp;	volatile int32_t *samplePosDisp, *chordLengthDisp; 	char mixText[16+1];	char *entryNameTmp, *currPath, *dropTempFileName;	UNICHAR *fileNameTmpU, *currPathU, *modulesPathU, *samplesPathU; 	bool errorMsgActive, errorMsgBlock, multiFlag, metroFlag, keypadToggle8CFlag, normalizeFiltersFlag;	bool sampleAllFlag, halfClipFlag, newOldFlag, pat2SmpHQ, mixFlag;	bool modLoaded, autoInsFlag, repeatKeyFlag, sampleZero, tuningToneFlag;	bool stepPlayEnabled, stepPlayBackwards, blockBufferFlag, blockMarkFlag, didQuantize;	bool swapChannelFlag, configFound, chordLengthMin, rowVisitTable[128 * MOD_ROWS];	bool muted[PAULA_VOICES]; 	int8_t smpRedoFinetunes[MOD_SAMPLES], smpRedoVolumes[MOD_SAMPLES], multiModeNext[4], trackPattFlag;	int8_t *smpRedoBuffer[MOD_SAMPLES], *tempSample, currSample, recordMode, sampleFrom, sampleTo, autoInsSlot;	int8_t hiLowInstr, note1, note2, note3, note4, oldNote1, oldNote2, oldNote3, oldNote4, stepPlayLastMode;	uint8_t playMode, currMode, tuningChan, tuningVol, errorMsgCounter, buffFromPos, buffToPos;	uint8_t blockFromPos, blockToPos, timingMode, f6Pos, f7Pos, f8Pos, f9Pos, f10Pos, keyOctave, pNoteFlag;	uint8_t tuningNote, resampleNote, initialTempo, initialSpeed, editMoveAdd; 	int16_t modulateSpeed;	uint16_t metroSpeed, metroChannel, sampleVol;	uint16_t effectMacros[10], currPlayNote, vol1, vol2, lpCutOff, hpCutOff;	int32_t smpRedoLoopStarts[MOD_SAMPLES], smpRedoLoopLengths[MOD_SAMPLES], smpRedoLengths[MOD_SAMPLES];	int32_t oldTempo, modulatePos, modulateOffset, markStartOfs, markEndOfs, samplePos, chordLength;	uint32_t playbackSeconds;	uint64_t playbackSecondsFrac; 	uint32_t framesPassed; 	note_t trackBuffer[MOD_ROWS], cmdsBuffer[MOD_ROWS], blockBuffer[MOD_ROWS];	note_t patternBuffer[MOD_ROWS * PAULA_VOICES], undoBuffer[MOD_ROWS * PAULA_VOICES];	SDL_Thread *mod2WavThread, *pat2SmpThread; #ifdef __APPLE__	bool macCmdQIssued;#endif} editor_t; typedef struct diskop_t{	volatile bool cached, isFilling, forceStopReading;	bool modPackFlg;	int8_t mode, smpSaveType;	int32_t numEntries, scrollOffset;	SDL_Keycode lastEntryJumpKey;	SDL_Thread *fillThread;} diskop_t; typedef struct cursor_t{	uint8_t lastPos, pos, mode, channel;	uint32_t bgBuffer[11 * 14];} cursor_t; typedef struct ui_t{	char statusMessage[18], prevStatusMessage[18];	volatile bool askBoxShown, throwExit;	bool editTextFlag, samplerScreenShown;	bool leftLoopPinMoving, rightLoopPinMoving, changingSmpResample, changingDrumPadNote;	bool forceSampleDrag, forceSampleEdit, introTextShown;	bool aboutScreenShown, posEdScreenShown, diskOpScreenShown;	bool samplerVolBoxShown, samplerFiltersBoxShown, samplingBoxShown, editOpScreenShown;	bool changingSamplingNote;	bool disableVisualizer; // ask boxes (f.ex. MOD2WAV)	int8_t pointerMode, editOpScreen;	int8_t visualizerMode, previousPointerMode, forceVolDrag, changingChordNote;	int16_t sampleMarkingPos;	uint16_t lastSampleOffset; 	// render/update flags	bool updateStatusText, updatePatternData;	bool updateSongName, updateMod2WavDialog, mod2WavFinished; 	// edit op. #2	bool updateRecordText, updateQuantizeText, updateMetro1Text, updateMetro2Text;	bool updateFromText, updateKeysText, updateToText; 	// edit op. #3	bool updateMixText, updatePosText, updateModText, updateVolText; 	// edit op. #4 (sample chord editor)	bool updateChordLengthText, updateChordNote1Text, updateChordNote2Text;	bool updateChordNote3Text, updateChordNote4Text; 	// sampler	bool updateResampleNote, updateVolFromText, updateVolToText, updateLPText;	bool updateHPText, updateNormFlag, update9xxPos; 	// general	bool updateSongPos, updateSongPattern, updateSongLength, updateCurrSampleFineTune;	bool updateCurrSampleNum, updateCurrSampleVolume, updateCurrSampleLength;	bool updateCurrSampleRepeat, updateCurrSampleReplen, updateCurrSampleName;	bool updateSongSize, updateSongTiming, updateSongBPM;	bool updateCurrPattText, updateTrackerFlags; 	// disk op.	bool updateLoadMode, updatePackText, updateSaveFormatText, updateDiskOpPathText; 	// pos ed.	bool updatePosEd, updateDiskOpFileList;} ui_t; typedef struct textEdit_t{	bool endReached, scrollable, force32BitNumPtr;	char *textPtr, *textEndPtr, *textStartPtr;	int8_t *numPtr8, tmpDisp8, type;	uint8_t numDigits, numBits;	int16_t cursorStartX, cursorStartY, object;	uint16_t *numPtr16, tmpDisp16, cursorBlock, numBlocks;	int32_t scrollOffset, *numPtr32, tmpDisp32;} textEdit_t; extern keyb_t keyb;extern mouse_t mouse;extern video_t video;extern editor_t editor;extern diskop_t diskop;extern cursor_t cursor;extern ui_t ui;extern textEdit_t textEdit;extern module_t *song; // pt2_main.c

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t