📄 dskimage.c
字号:
r = rect_assign(148, 135, 167, 155);
butt_browse = button_init(_malloc(sizeof(t_button)), r, "...",
950005,
BF_NORMAL);
OBJECT(hello)->insert(OBJECT(hello), OBJECT(butt_browse));
r = rect_assign(175, 30, 290, 55);
butt_di = button_init(_malloc(sizeof(t_button)), r, "Disk to Image",
950001,
BF_NORMAL);
OBJECT(hello)->insert(OBJECT(hello), OBJECT(butt_di));
r = rect_assign(175, 65, 290, 90);
butt_id = button_init(_malloc(sizeof(t_button)), r, "Image to Disk",
950002,
BF_NORMAL);
OBJECT(hello)->insert(OBJECT(hello), OBJECT(butt_id));
r = rect_assign(175, 100, 290, 125);
butt_exit = button_init(_malloc(sizeof(t_button)), r, "Exit",
950003,
BF_NORMAL);
OBJECT(hello)->insert(OBJECT(hello), OBJECT(butt_exit));
r = rect_assign(175, 135, 290, 160);
butt_about = button_init(_malloc(sizeof(t_button)), r, "About...",
950004,
BF_NORMAL);
OBJECT(hello)->insert(OBJECT(hello), OBJECT(butt_about));
}
int Disk_To_File ()
{
int a,b,c, tar;
unsigned status = 0;
char *drv;
drv = TEXTLINE(his2)->text;
di.drive = *drv - 'A';
if (strlen (TEXTLINE(fileimage)->text) < 1)
{
msgbox (MW_ERROR,1,"No filename specified.");
return (-1);
}
tar = open (GetFile(TEXTLINE(fileimage)->text), O_APPEND | O_CREAT | O_BINARY | O_WRONLY );
if (!tar)
{
msgbox (MW_ERROR,1,"Can't open file.");
return (-1);
}
else
{
// delete old file in exists
remove (TEXTLINE(fileimage)->text);
}
id_progress = 0;
TEXTLINE(stext4)->set_text(TEXTLINE(stext4), "0%");
_while ( id_progress < id_max_progress)
{
b = 1;
_while ( b < 19 )
{
c = 0;
_while ( c < 2 )
{
di.head = c;
di.track = id_progress;
di.sector = b;
di.nsectors = 1;
di.buffer = diskbuf;
status = _bios_disk( _DISK_READ, &di ) >> 8;
if (!status) break;
c++;
}
if (status)
{
a = _biso_disk_error_message(status);
if (a == -1)
{
close (tar);
return (-1);
}
}
write (tar, diskbuf , 512);
b++;
}
TEXTLINE(stext4)->set_text(TEXTLINE(stext4), set_format_text (NULL,"%3.0f%%", (float)((float)id_progress / (float)id_max_progress) * (float)100));
id_progress++;
}
close (tar);
id_progress = 80;
TEXTLINE(stext4)->set_text(TEXTLINE(stext4), "100%");
msgbox (MW_INFO,1,"Image is done!");
}
int File_To_Disk ()
{
int a,b,c, tar;
unsigned status = 0;
char *drv;
drv = TEXTLINE(his2)->text;
di.drive = *drv - 'A';
if (strlen (TEXTLINE(fileimage)->text) < 1)
{
msgbox (MW_ERROR,1,"No filename specified.");
return (-1);
}
tar = open (GetFile(TEXTLINE(fileimage)->text), O_RDONLY | O_BINARY );
if (!tar)
{
msgbox (MW_ERROR,1,"Can't open file.");
return (-1);
}
id_progress = 0;
TEXTLINE(stext4)->set_text(TEXTLINE(stext4), "0%");
// view_draw (VIEW(stext4));
_while ( id_progress < 80)
{
b = 1;
_while ( b < 19 )
{
c = 0;
_while ( c < 2 )
{
read (tar, diskbuf , 512);
di.head = c;
di.track = id_progress;
di.sector = b;
di.nsectors = 1;
di.buffer = diskbuf;
status = _bios_disk( _DISK_WRITE , &di ) >> 8;
if (!status) break;
c++;
}
if (status)
{
a = _biso_disk_error_message(status);
if (a == -1)
{
close (tar);
return (-1);
}
}
b++;
}
TEXTLINE(stext4)->set_text(TEXTLINE(stext4), set_format_text (NULL,"%3.0f%%", (float)((float)id_progress / (float)id_max_progress) * (float)100));
// view_draw (VIEW(stext4));
id_progress++;
}
close (tar);
id_progress = 80;
TEXTLINE(stext4)->set_text(TEXTLINE(stext4), "100%");
// view_draw (VIEW(stext4));
msgbox (MW_INFO,1,"Disk is done!");
}
int _biso_disk_error_message(unsigned bd_errnumb)
{
switch (bd_errnumb)
{
case 0x00:
return (0);
case 0x01:
msgbox (MW_ERROR,1,"Invalid request or a bad command");
return (0);
break;
case 0x02:
msgbox (MW_ERROR,1,"Address mark not found");
break;
case 0x03:
msgbox (MW_ERROR,1,"Disk write protected");
break;
case 0x04:
msgbox (MW_ERROR,1,"Sector not found");
break;
case 0x05:
msgbox (MW_ERROR,1,"Reset failed");
break;
case 0x06:
msgbox (MW_ERROR,1,"Floppy disk removed");
break;
case 0x07:
msgbox (MW_ERROR,1,"Drive parameter activity failed");
break;
case 0x08:
msgbox (MW_ERROR,1,"Direct Memory Access (DMA) overrun");
break;
case 0x09:
msgbox (MW_ERROR,1,"DMA crossed 64K boundary");
break;
case 0x0A:
msgbox (MW_ERROR,1,"Bad sector flag detected");
break;
case 0x0B:
msgbox (MW_ERROR,1,"Bad track flag detected");
break;
case 0x0C:
msgbox (MW_ERROR,1,"Media type not found");
break;
case 0x0D:
msgbox (MW_ERROR,1,"Invalid number of sectors on format");
break;
case 0x0E:
msgbox (MW_ERROR,1,"Control data access mark detected");
break;
case 0x0F:
msgbox (MW_ERROR,1,"DMA arbitration level out of range");
break;
case 0x10:
msgbox (MW_ERROR,1,"Data read (CRC or ECC) error");
break;
case 0x11:
msgbox (MW_ERROR,1,"Corrected data read (ECC) error");
break;
case 0x20:
msgbox (MW_ERROR,1,"Controller failure");
break;
case 0x40:
msgbox (MW_ERROR,1,"Seek error");
break;
case 0x80:
msgbox (MW_ERROR,1,"Disk timed out or failed to respond");
break;
case 0xAA:
msgbox (MW_ERROR,1,"Drive not ready");
break;
case 0xBB:
msgbox (MW_ERROR,1,"Undefined error");
break;
case 0xCC:
msgbox (MW_ERROR,1,"Write fault on drive");
break;
case 0xE0:
msgbox (MW_ERROR,1,"Status error");
break;
case 0xFF:
msgbox (MW_ERROR,1,"Sense operation failed");
break;
default:
msgbox (MW_ERROR,1,"Unknown error");
return (0);
break;
}
return (-1);
}
app_begin ( void ) {
if ( ap_process == AP_INIT ) {
init_hello();
};
} app_end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -