⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dskimage.c

📁 SEAL是DOS 下的32位保护模式的GUI程序
💻 C
📖 第 1 页 / 共 2 页
字号:
     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 + -