--- previous/src/gui-sdl/dlgSCSI.c 2018/04/24 19:30:49 1.1 +++ previous/src/gui-sdl/dlgSCSI.c 2018/04/24 19:32:53 1.1.1.2 @@ -12,6 +12,7 @@ const char DlgSCSI_fileid[] = "Previous #include "dialog.h" #include "sdlgui.h" #include "file.h" +#include "scsi.h" #define SCSIDLG_OFFSET 2 @@ -28,7 +29,8 @@ const char DlgSCSI_fileid[] = "Previous #define GET_TARGET(x) (((x)-(SCSIDLG_OFFSET))/(SCSIDLG_INTERVAL)) #define PUT_BUTTON(x,y) (((x)*(SCSIDLG_INTERVAL))+(SCSIDLG_OFFSET)+(y)) -#define SCSIDLG_EXIT 51 +#define SCSIDLG_OVERLAY 51 +#define SCSIDLG_EXIT 52 /* The SCSI dialog: */ @@ -93,6 +95,12 @@ static SGOBJ scsidlg[] = { SGBUTTON, 0, 0, 54,21, 8,1, "Browse" }, { SGTEXT, 0, 0, 3,22, 58,1, NULL }, +#if ENABLE_TESTING + { SGCHECKBOX, 0, 0, 3,24, 21,1, "Don't write to disk images, use temporary overlay" }, +#else + { SGTEXT, 0, 0, 3,24, 21,1, "" }, +#endif + { SGBUTTON, SG_DEFAULT, 0, 21,26, 21,1, "Back to main menu" }, { -1, 0, 0, 0,0, 0,0, NULL } }; @@ -128,7 +136,7 @@ static SGOBJ scsidlg[] = /* Draw device type selector */ -void DlgSCSI_DrawDevtypeSelect(void) { +static void DlgSCSI_DrawDevtypeSelect(void) { int i; for (i = 0; i < ESP_MAX_DEVS; i++) { @@ -195,9 +203,12 @@ void DlgSCSI_Main(void) scsidlg[PUT_BUTTON(i,SCSIDLG_NAME)].txt = dlgname_scsi[i]; } + /* Write Protection */ + if(ConfigureParams.SCSI.nWriteProtection == WRITEPROT_ON) scsidlg[SCSIDLG_OVERLAY].state |= SG_SELECTED; + else scsidlg[SCSIDLG_OVERLAY].state &= ~SG_SELECTED; + /* Draw and process the dialog */ - do - { + do { but = SDLGui_DoDialog(scsidlg, NULL); if (but>=SCSIDLG_OFFSET && but<((SCSIDLG_INTERVAL*ESP_MAX_DEVS)+SCSIDLG_OFFSET)) { @@ -221,6 +232,7 @@ void DlgSCSI_Main(void) ConfigureParams.SCSI.target[GET_TARGET(but)].bDiskInserted = false; ConfigureParams.SCSI.target[GET_TARGET(but)].szImageName[0] = '\0'; scsidlg[PUT_BUTTON(GET_TARGET(but),SCSIDLG_NAME)].txt[0] = '\0'; + SCSI_Eject(GET_TARGET(but)); } } else if (SDLGui_DiskSelect(dlgname_scsi[GET_TARGET(but)], ConfigureParams.SCSI.target[GET_TARGET(but)].szImageName, @@ -230,6 +242,9 @@ void DlgSCSI_Main(void) if (ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType == DEVTYPE_NONE) { ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType = DEVTYPE_HARDDISK; } + if (ConfigureParams.SCSI.target[GET_TARGET(but)].nDeviceType != DEVTYPE_HARDDISK) { + SCSI_Insert(GET_TARGET(but)); + } } DlgSCSI_DrawDevtypeSelect(); break; @@ -238,6 +253,11 @@ void DlgSCSI_Main(void) break; } } +#if ENABLE_TESTING + ConfigureParams.SCSI.nWriteProtection = (scsidlg[SCSIDLG_OVERLAY].state & SG_SELECTED) ? WRITEPROT_ON : WRITEPROT_OFF; +#else + ConfigureParams.SCSI.nWriteProtection = WRITEPROT_OFF; +#endif } while (but != SCSIDLG_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram);