Separated main code from UI and PLATform support code, plus other generally small fixes here and there.
This commit is contained in:
@@ -8,11 +8,12 @@
|
||||
*
|
||||
* Driver for the ESDI controller (WD1007-vse1) for PC/AT.
|
||||
*
|
||||
* Version: @(#)hdc_esdi_at.c 1.0.3 2017/10/05
|
||||
* Version: @(#)hdc_esdi_at.c 1.0.4 2017/10/09
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2008-2017 Sarah Walker.
|
||||
* Copyright 2016,2017 Miran Grca.
|
||||
* Copyright 2017 Fred N. van Kempen.
|
||||
@@ -32,7 +33,7 @@
|
||||
#include "../pic.h"
|
||||
#include "../rom.h"
|
||||
#include "../timer.h"
|
||||
#include "../win/win.h"
|
||||
#include "../ui.h"
|
||||
#include "hdc.h"
|
||||
#include "hdd.h"
|
||||
|
||||
@@ -514,7 +515,7 @@ esdi_callback(void *priv)
|
||||
esdi->pos = 0;
|
||||
esdi->status = STAT_DRQ | STAT_READY | STAT_DSC;
|
||||
irq_raise(esdi);
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
break;
|
||||
|
||||
case CMD_WRITE:
|
||||
@@ -549,7 +550,7 @@ esdi_callback(void *priv)
|
||||
} else {
|
||||
esdi->status = STAT_READY | STAT_DSC;
|
||||
}
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
break;
|
||||
|
||||
case CMD_VERIFY:
|
||||
@@ -575,7 +576,7 @@ esdi_callback(void *priv)
|
||||
break;
|
||||
}
|
||||
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
next_sector(esdi);
|
||||
esdi->secount = (esdi->secount - 1) & 0xff;
|
||||
if (esdi->secount)
|
||||
@@ -609,7 +610,7 @@ esdi_callback(void *priv)
|
||||
}
|
||||
esdi->status = STAT_READY | STAT_DSC;
|
||||
irq_raise(esdi);
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
break;
|
||||
|
||||
case CMD_DIAGNOSE:
|
||||
@@ -737,7 +738,7 @@ esdi_callback(void *priv)
|
||||
break;
|
||||
}
|
||||
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -52,10 +52,11 @@
|
||||
* however, are auto-configured by the system software as
|
||||
* shown above.
|
||||
*
|
||||
* Version: @(#)hdc_esdi_mca.c 1.0.5 2017/10/05
|
||||
* Version: @(#)hdc_esdi_mca.c 1.0.6 2017/10/09
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2008-2017 Sarah Walker.
|
||||
* Copyright 2017 Fred N. van Kempen.
|
||||
*/
|
||||
@@ -73,7 +74,7 @@
|
||||
#include "../pic.h"
|
||||
#include "../rom.h"
|
||||
#include "../timer.h"
|
||||
#include "../win/win.h"
|
||||
#include "../ui.h"
|
||||
#include "hdc.h"
|
||||
#include "hdd.h"
|
||||
|
||||
@@ -326,7 +327,7 @@ esdi_callback(void *priv)
|
||||
if (dev->rba >= drive->sectors)
|
||||
fatal("Read past end of drive\n");
|
||||
hdd_image_read(drive->hdd_num, dev->rba, 1, (uint8_t *)dev->data);
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
}
|
||||
|
||||
while (dev->data_pos < 256) {
|
||||
@@ -407,11 +408,11 @@ esdi_callback(void *priv)
|
||||
hdd_image_write(drive->hdd_num, dev->rba, 1, (uint8_t *)dev->data);
|
||||
dev->rba++;
|
||||
dev->sector_pos++;
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
|
||||
dev->data_pos = 0;
|
||||
}
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
|
||||
dev->status = STATUS_CMD_IN_PROGRESS;
|
||||
dev->cmd_state = 2;
|
||||
|
||||
@@ -9,10 +9,11 @@
|
||||
* Implementation of the IDE emulation for hard disks and ATAPI
|
||||
* CD-ROM devices.
|
||||
*
|
||||
* Version: @(#)hdc_ide.c 1.0.10 2017/10/05
|
||||
* Version: @(#)hdc_ide.c 1.0.11 2017/10/09
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
*
|
||||
* Copyright 2008-2017 Sarah Walker.
|
||||
* Copyright 2016,2017 Miran Grca.
|
||||
*/
|
||||
@@ -30,7 +31,7 @@
|
||||
#include "../device.h"
|
||||
#include "../cdrom/cdrom.h"
|
||||
#include "../scsi/scsi.h"
|
||||
#include "../win/win.h"
|
||||
#include "../ui.h"
|
||||
#include "hdc.h"
|
||||
#include "hdc_ide.h"
|
||||
#include "hdd.h"
|
||||
@@ -1297,7 +1298,7 @@ uint32_t ide_read_data(int ide_board, int length)
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1645,7 +1646,7 @@ void callbackide(int ide_board)
|
||||
|
||||
ide_irq_raise(ide);
|
||||
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
return;
|
||||
|
||||
case WIN_READ_DMA:
|
||||
@@ -1692,12 +1693,12 @@ void callbackide(int ide_board)
|
||||
ide_next_sector(ide);
|
||||
ide->atastat = BUSY_STAT;
|
||||
idecallback[ide_board]=6LL*IDE_TIME;
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ide_irq_raise(ide);
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1750,7 +1751,7 @@ void callbackide(int ide_board)
|
||||
ide->blockcount = 0;
|
||||
}
|
||||
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
return;
|
||||
|
||||
case WIN_WRITE:
|
||||
@@ -1771,12 +1772,12 @@ void callbackide(int ide_board)
|
||||
ide->atastat = DRQ_STAT | READY_STAT | DSC_STAT;
|
||||
ide->pos=0;
|
||||
ide_next_sector(ide);
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ide->atastat = READY_STAT | DSC_STAT;
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -1810,12 +1811,12 @@ void callbackide(int ide_board)
|
||||
ide_next_sector(ide);
|
||||
ide->atastat = BUSY_STAT;
|
||||
idecallback[ide_board]=6LL*IDE_TIME;
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ide_irq_raise(ide);
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1844,12 +1845,12 @@ void callbackide(int ide_board)
|
||||
ide->atastat = DRQ_STAT | READY_STAT | DSC_STAT;
|
||||
ide->pos=0;
|
||||
ide_next_sector(ide);
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ide->atastat = READY_STAT | DSC_STAT;
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 0);
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -1866,7 +1867,7 @@ void callbackide(int ide_board)
|
||||
ide->pos=0;
|
||||
ide->atastat = READY_STAT | DSC_STAT;
|
||||
ide_irq_raise(ide);
|
||||
StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1);
|
||||
return;
|
||||
|
||||
case WIN_FORMAT:
|
||||
@@ -1883,7 +1884,7 @@ void callbackide(int ide_board)
|
||||
ide->atastat = READY_STAT | DSC_STAT;
|
||||
ide_irq_raise(ide);
|
||||
|
||||
/* StatusBarUpdateIcon(SB_HDD | hdd[ide->hdd_num].bus, 1); */
|
||||
/* ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus, 1); */
|
||||
return;
|
||||
|
||||
case WIN_DRIVE_DIAGNOSTICS:
|
||||
|
||||
@@ -12,10 +12,11 @@
|
||||
* based design. Most cards were WD1003-WA2 or -WAH, where the
|
||||
* -WA2 cards had a floppy controller as well (to save space.)
|
||||
*
|
||||
* Version: @(#)hdd_mfm_at.c 1.0.5 2017/10/05
|
||||
* Version: @(#)hdd_mfm_at.c 1.0.6 2017/10/09
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2008-2017 Sarah Walker.
|
||||
* Copyright 2017 Fred N. van Kempen.
|
||||
*/
|
||||
@@ -29,7 +30,7 @@
|
||||
#include "../io.h"
|
||||
#include "../pic.h"
|
||||
#include "../timer.h"
|
||||
#include "../win/win.h"
|
||||
#include "../ui.h"
|
||||
#include "hdc.h"
|
||||
#include "hdd.h"
|
||||
|
||||
@@ -462,7 +463,7 @@ mfm_readw(uint16_t port, void *priv)
|
||||
mfm->callback = 6LL*MFM_TIME;
|
||||
timer_update_outstanding();
|
||||
} else {
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -562,7 +563,7 @@ do_callback(void *priv)
|
||||
|
||||
mfm->reset = 0;
|
||||
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -596,7 +597,7 @@ do_callback(void *priv)
|
||||
mfm->pos = 0;
|
||||
mfm->status = STAT_DRQ|STAT_READY|STAT_DSC;
|
||||
irq_raise(mfm);
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
break;
|
||||
|
||||
case CMD_WRITE:
|
||||
@@ -621,9 +622,9 @@ do_callback(void *priv)
|
||||
mfm->status |= STAT_DRQ;
|
||||
mfm->pos = 0;
|
||||
next_sector(mfm);
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
} else {
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
}
|
||||
irq_raise(mfm);
|
||||
break;
|
||||
@@ -637,7 +638,7 @@ do_callback(void *priv)
|
||||
mfm->pos = 0;
|
||||
mfm->status = STAT_READY|STAT_DSC;
|
||||
irq_raise(mfm);
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
break;
|
||||
|
||||
case CMD_FORMAT:
|
||||
@@ -657,7 +658,7 @@ do_callback(void *priv)
|
||||
|
||||
mfm->status = STAT_READY|STAT_DSC;
|
||||
irq_raise(mfm);
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
break;
|
||||
|
||||
case CMD_DIAGNOSE:
|
||||
@@ -734,7 +735,7 @@ mfm_init(device_t *info)
|
||||
|
||||
timer_add(do_callback, &mfm->callback, &mfm->callback, mfm);
|
||||
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
|
||||
return(mfm);
|
||||
}
|
||||
@@ -754,13 +755,14 @@ mfm_close(void *priv)
|
||||
|
||||
free(mfm);
|
||||
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 0);
|
||||
}
|
||||
|
||||
|
||||
device_t mfm_at_wd1003_device = {
|
||||
"WD1003 AT MFM/RLL Controller",
|
||||
DEVICE_ISA | DEVICE_AT, 0,
|
||||
DEVICE_ISA | DEVICE_AT,
|
||||
0,
|
||||
mfm_init, mfm_close, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL
|
||||
};
|
||||
|
||||
@@ -41,10 +41,11 @@
|
||||
* Since all controllers (including the ones made by DTC) use
|
||||
* (mostly) the same API, we keep them all in this module.
|
||||
*
|
||||
* Version: @(#)hdd_mfm_xt.c 1.0.7 2017/10/05
|
||||
* Version: @(#)hdd_mfm_xt.c 1.0.8 2017/10/09
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2008-2017 Sarah Walker.
|
||||
* Copyright 2017 Fred N. van Kempen.
|
||||
*/
|
||||
@@ -61,7 +62,7 @@
|
||||
#include "../pic.h"
|
||||
#include "../rom.h"
|
||||
#include "../timer.h"
|
||||
#include "../win/win.h"
|
||||
#include "../ui.h"
|
||||
#include "hdc.h"
|
||||
#include "hdd.h"
|
||||
|
||||
@@ -403,7 +404,7 @@ mfm_callback(void *priv)
|
||||
|
||||
mfm_complete(mfm);
|
||||
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -448,7 +449,7 @@ mfm_callback(void *priv)
|
||||
|
||||
hdd_image_read(drive->hdd_num, addr, 1,
|
||||
(uint8_t *) mfm->sector_buf);
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
|
||||
if (mfm->irq_dma_mask & DMA_ENA)
|
||||
mfm->callback = MFM_TIME;
|
||||
@@ -493,7 +494,7 @@ mfm_callback(void *priv)
|
||||
|
||||
hdd_image_read(drive->hdd_num, addr, 1,
|
||||
(uint8_t *) mfm->sector_buf);
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
|
||||
mfm->state = STATE_SEND_DATA;
|
||||
|
||||
@@ -505,7 +506,7 @@ mfm_callback(void *priv)
|
||||
}
|
||||
} else {
|
||||
mfm_complete(mfm);
|
||||
StatusBarUpdateIcon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -566,7 +567,7 @@ mfm_callback(void *priv)
|
||||
|
||||
hdd_image_write(drive->hdd_num, addr, 1,
|
||||
(uint8_t *) mfm->sector_buf);
|
||||
StatusBarUpdateIcon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon(SB_HDD|HDD_BUS_MFM, 1);
|
||||
|
||||
next_sector(mfm);
|
||||
mfm->data_pos = 0;
|
||||
@@ -857,7 +858,8 @@ xebec_available(void)
|
||||
|
||||
device_t mfm_xt_xebec_device = {
|
||||
"IBM PC Fixed Disk Adapter",
|
||||
0, 0,
|
||||
DEVICE_ISA,
|
||||
0,
|
||||
xebec_init, mfm_close, NULL,
|
||||
xebec_available, NULL, NULL, NULL,
|
||||
NULL
|
||||
@@ -908,7 +910,8 @@ dtc5150x_available(void)
|
||||
|
||||
device_t mfm_xt_dtc5150x_device = {
|
||||
"DTC 5150X",
|
||||
DEVICE_ISA, 0,
|
||||
DEVICE_ISA,
|
||||
0,
|
||||
dtc5150x_init, mfm_close, NULL,
|
||||
dtc5150x_available, NULL, NULL, NULL,
|
||||
NULL
|
||||
|
||||
@@ -21,11 +21,12 @@
|
||||
* already on their way out, the newer IDE standard based on the
|
||||
* PC/AT controller and 16b design became the IDE we now know.
|
||||
*
|
||||
* Version: @(#)hdc_xtide.c 1.0.7 2017/10/04
|
||||
* Version: @(#)hdc_xtide.c 1.0.8 2017/10/09
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
*
|
||||
* Copyright 2008-2017 Sarah Walker.
|
||||
* Copyright 2016,2017 Miran Grca.
|
||||
* Copyright 2017 Fred N. van Kempen.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Common code to handle all sorts of hard disk images.
|
||||
*
|
||||
* Version: @(#)hdd.c 1.0.3 2017/10/07
|
||||
* Version: @(#)hdd.c 1.0.4 2017/10/09
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
@@ -21,10 +21,7 @@
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#include "../ibm.h"
|
||||
#include "../cpu/cpu.h"
|
||||
#include "../device.h"
|
||||
#include "../machine/machine.h"
|
||||
#include "../win/win.h"
|
||||
#include "../ui.h"
|
||||
#include "hdd.h"
|
||||
|
||||
|
||||
@@ -50,7 +47,7 @@ hdd_string_to_bus(char *str, int cdrom)
|
||||
if (! strcmp(str, "mfm")) {
|
||||
if (cdrom) {
|
||||
no_cdrom:
|
||||
msgbox_error(hwndMain, IDS_4114);
|
||||
ui_msgbox(MBX_ERROR, (wchar_t *)IDS_4114);
|
||||
return(0);
|
||||
}
|
||||
|
||||
@@ -113,7 +110,7 @@ no_cdrom:
|
||||
}
|
||||
|
||||
if (! strcmp(str, "usb"))
|
||||
msgbox_error(hwndMain, IDS_4110);
|
||||
ui_msgbox(MBX_ERROR, (wchar_t *)IDS_4110);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user