File:  [HATARI the Atari ST Emulator] / hatari / src / gui-sdl / dlgMemory.c
Revision 1.1.1.12 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 9 08:59:36 2019 UTC (7 years, 3 months ago) by root
Branches: hatari, MAIN
CVS tags: hatari02210, hatari02200, HEAD
hatari 2.2.0

/*
  Hatari - dlgMemory.c

  This file is distributed under the GNU General Public License, version 2
  or at your option any later version. Read the file gpl.txt for details.
*/
const char DlgMemory_fileid[] = "Hatari dlgMemory.c : " __DATE__ " " __TIME__;

#include "main.h"
#include "dialog.h"
#include "sdlgui.h"
#include "memorySnapShot.h"
#include "file.h"
#include "screen.h"
#include "options.h"


#define DLGMEM_256KB	4
#define DLGMEM_512KB	5
#define DLGMEM_1MB	6
#define DLGMEM_2MB	7
#define DLGMEM_2_5MB	8
#define DLGMEM_4MB	9
#define DLGMEM_8MB	10
#define DLGMEM_14MB	11
#define DLGMEM_TTRAM_LESS	13
#define DLGMEM_TTRAM_TEXT	14
#define DLGMEM_TTRAM_MORE	15
#define DLGMEM_FILENAME	20
#define DLGMEM_SAVE	21
#define DLGMEM_RESTORE	22
#define DLGMEM_AUTOSAVE	23
#define DLGMEM_EXIT	24


/* String for TT RAM size */
static char sTTRamSize[4];

#define DLG_TTRAM_STEP	4
#define DLG_TTRAM_MIN	0
#define DLG_TTRAM_MAX	512

static char dlgSnapShotName[36+1];


/* The memory dialog: */
static SGOBJ memorydlg[] =
{
	{ SGBOX, 0, 0, 0,0, 40,25, NULL },

	{ SGBOX, 0, 0, 1,1, 38,10, NULL },
	{ SGTEXT, 0, 0, 15,2, 12,1, "Memory setup" },
	{ SGTEXT, 0, 0, 4,4, 12,1, "ST-RAM size:" },
	{ SGRADIOBUT, 0, 0, 18,4, 9,1, "256 KiB" },
	{ SGRADIOBUT, 0, 0, 18,5, 9,1, "_512 KiB" },
	{ SGRADIOBUT, 0, 0, 18,6, 7,1, "_1 MiB" },
	{ SGRADIOBUT, 0, 0, 18,7, 7,1, "_2 MiB" },
	{ SGRADIOBUT, 0, 0, 29,4, 7,1, "2.5 MiB" },
	{ SGRADIOBUT, 0, 0, 29,5, 7,1, "_4 MiB" },
	{ SGRADIOBUT, 0, 0, 29,6, 7,1, "_8 MiB" },
	{ SGRADIOBUT, 0, 0, 29,7, 8,1, "14 _MiB" },
	{ SGTEXT,     0, 0,  4,9,12,1, "TT-RAM size:" },
	{ SGBUTTON,   0, 0, 18,9, 1,1, "\x04", SG_SHORTCUT_LEFT },
	{ SGTEXT,     0, 0, 20,9, 3,1, sTTRamSize },
	{ SGBUTTON,   0, 0, 24,9, 1,1, "\x03", SG_SHORTCUT_RIGHT },
	{ SGTEXT,     0, 0, 26,9,12,1, "MiB" },

	{ SGBOX,      0, 0,  1,12, 38,10, NULL },
	{ SGTEXT,     0, 0, 12,13, 17,1, "Memory state save" },
	{ SGTEXT,     0, 0,  2,15, 20,1, "Snap-shot file name:" },
	{ SGTEXT,     0, 0,  2,16, 36,1, dlgSnapShotName },
	{ SGBUTTON,   0, 0,  8,18, 10,1, "_Save" },
	{ SGBUTTON,   0, 0, 22,18, 10,1, "_Restore" },
	{ SGCHECKBOX, 0, 0,  2,20, 34,1, "_Load/save state at start-up/exit" },

	{ SGBUTTON, SG_DEFAULT, 0, 10,23, 20,1, "Back to main menu" },
	{ SGSTOP, 0, 0, 0,0, 0,0, NULL }
};



/**
 * Show and process the memory dialog.
 * @return  true if a memory snapshot has been loaded, false otherwise
 */
bool Dialog_MemDlg(void)
{
	int i, memsize;
	int but;

	SDLGui_CenterDlg(memorydlg);

	for (i = DLGMEM_256KB; i <= DLGMEM_14MB; i++)
	{
		memorydlg[i].state &= ~SG_SELECTED;
	}

	switch (ConfigureParams.Memory.STRamSize_KB)
	{
	 case 256:
		memorydlg[DLGMEM_256KB].state |= SG_SELECTED;
		break;
	 case 512:
		memorydlg[DLGMEM_512KB].state |= SG_SELECTED;
		break;
	 case 1024:
		memorydlg[DLGMEM_1MB].state |= SG_SELECTED;
		break;
	 case 2*1024:
		memorydlg[DLGMEM_2MB].state |= SG_SELECTED;
		break;
	 case 2*1024+512:
		memorydlg[DLGMEM_2_5MB].state |= SG_SELECTED;
		break;
	 case 4*1024:
		memorydlg[DLGMEM_4MB].state |= SG_SELECTED;
		break;
	 case 8*1024:
		memorydlg[DLGMEM_8MB].state |= SG_SELECTED;
		break;
	 default:
		memorydlg[DLGMEM_14MB].state |= SG_SELECTED;
		break;
	}
	memsize = ConfigureParams.Memory.TTRamSize_KB/1024;
	if (memsize < DLG_TTRAM_MIN)
		memsize = DLG_TTRAM_MIN;
	else if (memsize > DLG_TTRAM_MAX)
		memsize = DLG_TTRAM_MAX;
#if ENABLE_WINUAE_CPU
	sprintf(sTTRamSize, "%3i", memsize);
#else
	strcpy(sTTRamSize, "N/A");
#endif
	File_ShrinkName(dlgSnapShotName, ConfigureParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w);


	if (ConfigureParams.Memory.bAutoSave)
		memorydlg[DLGMEM_AUTOSAVE].state |= SG_SELECTED;
	else
		memorydlg[DLGMEM_AUTOSAVE].state &= ~SG_SELECTED;

	do
	{
		but = SDLGui_DoDialog(memorydlg, NULL, false);

		switch (but)
		{
#if ENABLE_WINUAE_CPU
		 case DLGMEM_TTRAM_LESS:
			memsize = Opt_ValueAlignMinMax(memsize - DLG_TTRAM_STEP, DLG_TTRAM_STEP, DLG_TTRAM_MIN, DLG_TTRAM_MAX);
			sprintf(sTTRamSize, "%3i", memsize);
			break;
		 case DLGMEM_TTRAM_MORE:
			memsize = Opt_ValueAlignMinMax(memsize + DLG_TTRAM_STEP, DLG_TTRAM_STEP, DLG_TTRAM_MIN, DLG_TTRAM_MAX);
			sprintf(sTTRamSize, "%3i", memsize);
			break;
#endif
		 case DLGMEM_SAVE:              /* Save memory snap-shot */
			if (SDLGui_FileConfSelect("Save memory snapshot:", dlgSnapShotName,
			                          ConfigureParams.Memory.szMemoryCaptureFileName,
			                          memorydlg[DLGMEM_FILENAME].w, true))
			{
				MemorySnapShot_Capture(ConfigureParams.Memory.szMemoryCaptureFileName, true);
			}
			break;
		 case DLGMEM_RESTORE:           /* Load memory snap-shot */
			if (SDLGui_FileConfSelect("Load memory snapshot:", dlgSnapShotName,
			                          ConfigureParams.Memory.szMemoryCaptureFileName,
			                          memorydlg[DLGMEM_FILENAME].w, false))
			{
				MemorySnapShot_Restore(ConfigureParams.Memory.szMemoryCaptureFileName, true);
				return true;
			}
			break;
		}
	}
	while (but != DLGMEM_EXIT && but != SDLGUI_QUIT
	        && but != SDLGUI_ERROR && !bQuitProgram );

	/* Read new values from dialog: */

	if (memorydlg[DLGMEM_256KB].state & SG_SELECTED)
		ConfigureParams.Memory.STRamSize_KB = 256;
	else if (memorydlg[DLGMEM_512KB].state & SG_SELECTED)
		ConfigureParams.Memory.STRamSize_KB = 512;
	else if (memorydlg[DLGMEM_1MB].state & SG_SELECTED)
		ConfigureParams.Memory.STRamSize_KB = 1024;
	else if (memorydlg[DLGMEM_2MB].state & SG_SELECTED)
		ConfigureParams.Memory.STRamSize_KB = 2*1024;
	else if (memorydlg[DLGMEM_2_5MB].state & SG_SELECTED)
		ConfigureParams.Memory.STRamSize_KB = 2*1024+512;
	else if (memorydlg[DLGMEM_4MB].state & SG_SELECTED)
		ConfigureParams.Memory.STRamSize_KB = 4*1024;
	else if (memorydlg[DLGMEM_8MB].state & SG_SELECTED)
		ConfigureParams.Memory.STRamSize_KB = 8*1024;
	else
		ConfigureParams.Memory.STRamSize_KB = 14*1024;

	ConfigureParams.Memory.TTRamSize_KB = memsize*1024;

	ConfigureParams.Memory.bAutoSave = (memorydlg[DLGMEM_AUTOSAVE].state & SG_SELECTED);

	return false;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.