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

📄 diy.c

📁 操作系统的进程管理、设备管理、文件管理的动态演示(C版)
💻 C
字号:
/*清除屏幕*/ 
void My_clrscr(int x1,int y1,int x2,int y2,int bkcolor)
{ 
    if(x1<1 ||y1<1 )   return;
    if(y2>25||x2>80)   return;
    if(x1>x2||y1>y2)   return;
    regs.h.ah=6; /*子功能号*/
    regs.h.al=0; /*滚动行数*/
    regs.h.bh=bkcolor*16;
    regs.h.ch=y1-1;
    regs.h.cl=x1-1;
    regs.h.dh=y2;
    regs.h.dl=x2;
    int86(16,&regs,&regs);
}

/*窗口滚屏*/ 
void Window_roll(int x1,int y1,int x2,int y2,int direct,int step,int bkcolor)
{ 
   union REGS regs;
   if(x1<1 ||y1<1 )   return;
   if(y2>25||x2>80)   return;
   if(x1>x2||y1>y2||
      direct>2||direct<1) return;
   regs.h.ah=5+direct;/*ah=06h 向上滚动当前页*/
                      /*ah=07h 向下滚动当前页*/
   regs.h.al=step;    /*滚动行数*/
   regs.h.bh=bkcolor*16;
   regs.h.ch=y1-1; /*左上角行*/
   regs.h.cl=x1-1; /*列*/
   regs.h.dh=y2;   /*右下角行*/
   regs.h.dl=x2;   /*列*/
   int86(16,&regs,&regs);
}

/*打开或关闭光标*/ 
void Cursor(int on_off)
{ 
   union REGS regs;
   if (on_off!=0) on_off=10;
   regs.h.ah=1;
   regs.h.ch=3;
   regs.h.cl=on_off;
   int86(16,&regs,&regs);
} 

/*时间精确延迟*/ 
void My_delay(float t)
{  /* 单位为秒,可以精确到0.000001秒*/
   clock_t OldTime;/* time_t,long */
   if (t<=0) return;
   OldTime=clock(); /*确定处理器时间*/
   while((clock()-OldTime)/18.2<t)
        if(kbhit())break;
}
/*喇叭发声*/ 
void My_sound(int frequency,float time)
{ 
   if (time<0||NO_SOUND) return;
   sound(frequency);
   My_delay(time);
   nosound();
} 
/*设置前景色和背景色*/
void My_setcolor(int QJcolor,int BKcolor)
{
   textcolor(QJcolor);
   textbackground(BKcolor);
}
/*显示一个字符串*/ 
void My_puts(char *s,int QJcolor,int BKcolor)
{ 
    union REGS regs;
    int   color,x,y;
    x=wherex();
    y=wherey();
    color=16*BKcolor+QJcolor;
    while(*s) 
    {
       regs.h.ah=9; 
       regs.h.al=*s; 
       regs.h.bh=0; 
       regs.h.bl=color; 
       regs.x.cx=1; /*最后一个字符显示的次数,但不改变光标位置*/
       int86(16,&regs,&regs);
       x++; 
       if(x>80)
       {  x=1;
          y++;
       }
       if(y>25) y=25;
       gotoxy(x,y); 
       s++;
     }
} 
/*打印一个矩形*/
int Box(int x1,int y1,int x2,int y2,int color,int bkcolor)
{   /* 画矩形框函数*/
    int    i;
    char   back[2];
    struct text_info ti;

    if(x1>x2||y1>y2||x1<1||x2>80||y1<1||y2>25) return 0;
    gettextinfo(&ti); /* 获得当前窗口的文本信息*/
    window(x1,y1,x2,y2);textcolor(color);textbackground(bkcolor);
    putch(0xd9);      /* 将框右下角保存*/
    gettext(x1,y1,x1,y1,back);gotoxy(1,1);
    putch(0xda);      /* 画框左上角*/
    for(i=2;i<=x2-x1;i++) putch(0xc4); /* 画框上边*/
    putch(0xbf);      /* 画框右上角*/
    for(i=2;i<=y2-y1;i++)
    {   /* 画框的左右两边*/
        gotoxy(1,i);       putch(0xb3);
        gotoxy(x2-x1+1,i); putch(0xb3);
    }
    gotoxy(1,y2);   putch(0xc0);      /* 画框左下角*/
    for(i=2;i<=x2-x1;i++) putch(0xc4);/* 画框下边*/
    puttext(x2,y2,x2,y2,back); /* 画框右下角,为了避免光标下移,所以用了puttext()*/
    window(ti.winleft,ti.wintop,ti.winright,ti.winbottom);
    textbackground(ti.attribute>>4);textcolor(ti.attribute&0x000f);
    gotoxy(ti.curx,ti.cury);
}
int Pause()
{  /* 暂停*/
   int select=0,msx,msy,msz;
   do{
       select=Msread(&msx,&msy,&msz);
   }while(select==-1&&msz!=2&&msz!=3);
   Nomouse();return select==-1?msz:select;
}
/****************************************************************************/
int Warning(char question[])
{
     int    slect,msx,msy,msz,old_slect=-1;
     char   back[51*9*2];

     Nomouse();gettext(17,9,67,17,back);
     window(17,9,67,17); textbackground(2);clrscr();
     textcolor(15);gotoxy(46,1);cprintf("-  X");
     window(18,10,66,16);textbackground(9);clrscr();
     cprintf("%s",question);
     gotoxy(15,6);textcolor(7);cprintf("  YES  ");
     textcolor(4);gotoxy(15,6);cprintf("  Y");
     textbackground(3);old_slect=-1; /* 默认选中"  NO   "*/
     gotoxy(30,6);textcolor(7);cprintf("  NO   ");
     textcolor(4);gotoxy(30,6);cprintf("  N");
     My_sound(1000,0.04);My_sound(80,0.05);
     while(1)
     {
          slect=Msread(&msx,&msy,&msz);
          if((Msinbox(360,112,425,120)&&slect==-1) || slect==RIGHT)
          {  /* 向右或是鼠标停在"NO"按钮上,old_slect!=RIGHT用来避免重复此语句*/
             if(old_slect!=RIGHT)
             {  Nomouse();
                textbackground(9);
                gotoxy(15,6);textcolor(7);cprintf("  YES  ");
                textcolor(4);gotoxy(15,6);cprintf("  Y");
                textbackground(3);
                gotoxy(30,6);textcolor(7);cprintf("  NO   ");
                textcolor(4);gotoxy(30,6);cprintf("  N");
                old_slect=RIGHT;
              }                  /*在"NO"上点了鼠标左键*/
              if(msz==1)  { Nomouse();puttext(17,9,67,17,back);return ERROR;}
          }
          if((Msinbox(245,112,310,120)&&slect==-1) || slect==LEFT)
          {  /* 向左或是鼠标停在"YES"按钮上,old_slect!=LEFT用来避免重复此语句*/
             if(old_slect!=LEFT)
             {  Nomouse();
                textbackground(9);
                gotoxy(30,6);textcolor(7);cprintf("  NO   ");
                textcolor(4);gotoxy(30,6);cprintf("  N");
                textbackground(3);
                gotoxy(15,6);textcolor(7);cprintf("  YES  ");
                textcolor(4);gotoxy(15,6);cprintf("  Y");
                old_slect=LEFT;
             } /*在"YES"上点了鼠标左键*/
             if(msz==1)  break;
          }
          /* 若在"NO"上点了确定,或按了'n',
             或是按了Esc键或是按了鼠标右键就表示退出*/
          if( (slect==ENTER&&(old_slect==RIGHT||old_slect==-1))||
              slect==NO||slect==ESC||msz==2||
              (msz==1&&Msinbox(510,63,520,72)))/*点击小差*/
          {  Nomouse();puttext(17,9,67,17,back);
             return ERROR;
          }
          /* 若在"YES"上点了确定,或按了'y',就表示确定了*/
          if( ( slect==ENTER&&old_slect==LEFT) || slect==YES) break;
     }/* while*/
     Nomouse();puttext(17,9,67,17,back);return OK;
}
/****************************************************************************/
int YES_NO()
{  /* 确认*/
   int slect=0,msx,msy,msz;
   My_sound(500,0.09);
   do{
       slect=Msread(&msx,&msy,&msz);
       if(slect==ESC||msz==2)   slect=NO;   /* ESC 键和鼠标右键表示否*/
       if(slect==ENTER||msz==3) slect=YES;/* Enter 键和鼠标双键表示是*/
   }while(slect!=YES&&slect!=NO); /* 只有输入‘y'或‘n'或Esc或点击右键时才能跳出*/
   Nomouse();return slect;
}

int No_Data()
{   /* 当没有数据时,给出提示*/
    char  nodata[]={"\r\n       There are no any data!\r\n\n     Press any key to quit ..."};
    Attention(nodata,parten.RANGE_COLOR,2,14);
    return OK;
}
int Attention(char str[],short bkc1,short bkc2,short qjc)
{
    int  slect,msx,msy,msz;
    char back[41*7*2];

    gettext(20,10,60,16,back);
    if(bkc1==7||bkc1==15) bkc1=4;
    textbackground(bkc1);window(20,10,60,16);clrscr();
    textcolor(15);gotoxy(37,1);cprintf("-  X");
    textbackground(bkc2);window(21,11,59,15);clrscr();
    textcolor(qjc); cputs(str);
    My_sound(600,0.08);
    do{
       slect=Msread(&msx,&msy,&msz);
       if(Msinbox(58*8,4*18,60*8,5*16)&&msz==1) msz=2;/* 单击小差58*8,4*18,60*8,5*16*/
    }while(slect==-1&&msz!=2);
    puttext(20,10,60,16,back);Nomouse(); return slect;
}
int Exit()              /*设置退出界面*/
{
   char *str={"\r\n                  ATTENTION\r\n\n       Do you want to quit or not?  <Y/N>"};
   int  order;

   order=Warning(str);
   window(1,1,80,25);
   if(order!=OK) return;
   textbackground(0);clrscr();
   window(23,5,60,18);Box(21,4,58,19,6,6);
   textcolor(15);
   cprintf("\r\n =========== THANK YOU ==========\r\n\n\n");
   textcolor(9);
   cprintf("     MadeBy: XQL              \r\n");
   cprintf("     My  QQ: 527274766        \r\n");
   cprintf("     E-mail: 0501xql@163.com  \r\n");
   cprintf("     MadeIn: CSU 24#105       \r\n\n");
   cprintf("     Thank you for your use!\r\n\n\n");
   textcolor(2);
   cprintf("     Press any key to quit.....");
   Pause();exit(0);
}
int Ver()
{  /* 版本信息*/
   char back[39*10*2];
   gettext(19,9,57,18,back);
   window(19,9,57,18);
    textbackground(parten.RANGE_COLOR);clrscr();
   textcolor(14);cprintf("\r\n Ver");
   window(20,11,56,17);
   textbackground(parten.RANGE_COLOR+3);clrscr();
   textcolor(parten.RANGE_COLOR+5);
   cprintf("\r\n    MadeBy: XQL              \r\n");
   cprintf("    My  QQ: 527274766        \r\n");
   cprintf("    E-mail: 0501xql@163.com  \r\n");
   cprintf("    MadeIn: CSU 24#105       \r\n");
   cprintf("    Ver 1.00  -- 2009.02.23  \r\n");
   Pause();
   puttext(19,9,57,18,back);
   return 1;

}
int Help()
{  /* 帮助*/
   char back[39*10*2];
   gettext(19,8,57,17,back);
   window(19,8,57,17); textbackground(parten.RANGE_COLOR);clrscr();
   textcolor(14);cprintf("\r\n Help");
   window(20, 10,56,16); textbackground(parten.RANGE_COLOR+3);clrscr();
   textcolor(parten.RANGE_COLOR+5);
   cprintf("\r\n   1. You can use mouse and keybord  to do it!\r\n");
   cprintf("   2. The menus and fast keybord hit has the same result.\r\n");
   cprintf("   3. Than you for your use !!!");
   Pause();
   puttext(19,8,57,17,back);
   return 1;
}
int About_me()
{  /* 关于作者*/ 
    FILE *fp=fopen("ReadMe.txt","r");
    if(!fp) {Warning("\r\n\n      The file for help is lost..."); return;}
    system("NOTEPAD.exe ReadMe.txt");
    return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -