📄 tools321.c
字号:
}
else {
mouse_off(1);
clear_sub_menu(last_menu);
sub_menu_on=0;mouse_on(1);
}
break;
case 2:
if (mouse_in_box(0,20,6,20+sub_width[2],5+sub_menu_nums[2]))
{
mouse_txt_posn(&mousex,&mousey);
sub_num=mousey-7;
/*if((sub_num==2)||(sub_num==4)) //这里原来的菜单项已经被删除
if(menu_status==32)
break;
if((sub_num==3)||(sub_num==5))
if(menu_status==16)
break;*/
mouse_off(1);
clear_roll_bar(last_menu,last_sub_num);
last_sub_num=sub_num;
draw_roll_bar(last_menu,sub_num);
mouse_on(1);
goto enter;
}
else {
mouse_off(1);
clear_sub_menu(last_menu);
sub_menu_on=0;mouse_on(1);
}
break;
case 3:
if(mouse_in_box(0,28,6,28+sub_width[3],5+sub_menu_nums[3]))
{
mouse_txt_posn(&mousex,&mousey);
sub_num=mousey-7;
mouse_off(1);
clear_roll_bar(last_menu,last_sub_num);
last_sub_num=sub_num;
draw_roll_bar(last_menu,sub_num);
mouse_on(1);
goto enter;
}
else {
mouse_off(1);
clear_sub_menu(last_menu);
sub_menu_on=0;mouse_on(1);
}
break;
case 4:
if(mouse_in_box(0,36,6,36+sub_width[4],5+sub_menu_nums[4]))
{
mouse_txt_posn(&mousex,&mousey);
sub_num=mousey-7;
mouse_off(1);
clear_roll_bar(last_menu,last_sub_num);
last_sub_num=sub_num;
draw_roll_bar(last_menu,sub_num);
mouse_on(1);goto enter;
}
else {
mouse_off(1);
clear_sub_menu(last_menu);
sub_menu_on=0;
mouse_on(1);
}
break;
case 5:
if(mouse_in_box(0,43,6,43+sub_width[5],5+sub_menu_nums[5]))
{
mouse_txt_posn(&mousex,&mousey);
sub_num=mousey-7;
if(sub_num==2)
if(menu_status==32)
break; //这里控制鼠标点击相应子菜单无效
if(sub_num==3)
if(menu_status==16)
break;
mouse_off(1);
clear_roll_bar(last_menu,last_sub_num);
last_sub_num=sub_num;
draw_roll_bar(last_menu,sub_num);
mouse_on(1);goto enter;
}
else {
mouse_off(1);
clear_sub_menu(last_menu);
sub_menu_on=0;
mouse_on(1);
}
break;
case 6:
if(mouse_in_box(0,50,6,50+sub_width[6],5+sub_menu_nums[6]))
{
mouse_txt_posn(&mousex,&mousey);
sub_num=mousey-7;
mouse_off(1);
clear_roll_bar(last_menu,last_sub_num);
last_sub_num=sub_num;
draw_roll_bar(last_menu,sub_num);
mouse_on(1);goto enter;
}
else {
mouse_off(1);
clear_sub_menu(last_menu);
sub_menu_on=0;mouse_on(1);
}
break;
case 7:
if(mouse_in_box(0,63,6,63+sub_width[7],5+sub_menu_nums[7]))
{
mouse_txt_posn(&mousex,&mousey);
sub_num=mousey-7;
mouse_off(1);
clear_roll_bar(last_menu,last_sub_num);
last_sub_num=sub_num;
draw_roll_bar(last_menu,sub_num);
mouse_on(1);
goto enter;
}
else {
mouse_off(1);
clear_sub_menu(last_menu);
sub_menu_on=0;mouse_on(1);
}
break;
}
break;
case F10: /* 菜单激发键 */
case ESC:
case ' ':
mouse_off(1);
if(!sub_menu_on){
draw_sub_menu(last_menu,1);
sub_num=last_sub_num=main_menu[last_menu].last_choice;
sub_menu_on=1;
}
else{
clear_sub_menu(last_menu);
sub_menu_on=0;
}
mouse_on(1);
break;
}//匹配 switch(key){
}//匹配 if(sub_menu_on || key==ESC || key==F10 || key==' '||key==LEFT_MOUSE_PRESS){
/* 浏览键判断 */
else if(!sub_menu_on){
switch(key){
case PGUP:
if(pos==16 && data_lines>16){ pos=0; display(pos); }
break;
case PGDN:
if(pos==0 && data_lines>16){ pos=16;display(pos); }
break;
}
}
key=0;
}while(!sys_end);
setblank(1);
textattr(7);
clrscr();
ENDS: setcursor(6,7);
}
/*--------------子函数--------------*/
/////////////////////////////////////////////////////////////////////////////
int hotkey_func(int key) //热键判断
{
if(key==Ctrl_Q || key==Alt_X){
if(object==NONE) {sys_end=1;mouse_off(1);
}
else
if(make_sure(1,"Are you sure to Exit? (Y/N)")) sys_end=1;
}
else if(key==F1 || key=='/' || key=='?') help();
else if(key==Alt_F10) shell();
else if(key==Ctrl_B || key==Ctrl_W){ //写引导扇区
if(sub_menu_on && last_menu==4 && sub_num>=2)
write_boot(sub_num-2); //注意,这一句,要改动主菜单BOOT的子菜单保存的功能
}
else if(key==Ctrl_R || key==F3 || key==Alt_E){
if(sub_menu_on){
clear_sub_menu(last_menu);
sub_menu_on=0;
}
if(key==Ctrl_R) /**readdisk_window();/**/read_freely();
else if(key==F3 || key==Alt_E){
if(edit_data(object,pos))
putsxy(prompt1,2,24,(bgcolor<<4)+0xb);
}
}
else return(0);
return(1);
}
/*************** Sub *****************/
char scr_buff[4100]; /* 用于保存屏幕 */
void shell(void) //DOS SHELL
{
void *scr;
scr=malloc(4096);
gettext(1,1,80,25,scr); /*将文本屏幕上的文本拷贝到内存,左、上、右、下*/
if(filefind("\\command.com")){
setcursor(6,7);
setblank(1);
textattr(7);
clrscr();
putsxy("Type Exit to return to Tools ",1,1,0x8f);
system("\\command.com");
setblank(0);
setcursor(1,0);
}
else
make_sure(0,"COMMAND.COM not in root!");
puttext(1,1,80,25,scr); /*从内存区拷贝文本到屏幕*/
}
void put_item(struct menu_type *m,int status) //显示主菜单字符
/* status=0 Off; status=1 On */
{
char x,color,*str;
x=m->item_pos; str=m->item;
if(status==0) //将选中的主菜单变色
while(*str!='\0'){
if(str==m->item) color=hot_color;
else color=item_color;
putchxy(*str,x,item_line,(menu_line_color<<4)+color); //刷新显示主菜单
x++; str++;
}
else
putsxy(str,x,item_line,(moving_bcolor<<4)+moving_tcolor); //将选中的主菜单变色
}
void init_menu(void) /* 初始化菜单项 */
{
int i;
struct menu_type *m;
main_menu[0].item_pos =4;
for(i=0;i<Max_menus;i++){
main_menu[i].hotkey =*menuitem[i];
main_menu[i].item =menuitem[i]; //要显示的主菜单项
main_menu[i].item_width=strlen(main_menu[i].item)+3; //控制每个主菜单项的间隔
if(i)
main_menu[i].item_pos =main_menu[i-1].item_width+
+main_menu[i-1].item_pos;
main_menu[i].left =main_menu[i].item_pos-1;
main_menu[i].top =item_line+item_height+1;
main_menu[i].sub_width =sub_width[i];
main_menu[i].sub_menu_nums=sub_menu_nums[i];
main_menu[i].last_choice=0;
}
main_menu[i-1].left=77-sub_width[i-1]-1; //帮助子菜单的显示位置
main_menu[i-1].item_pos=77-main_menu[i-1].item_width; //主菜单“help”的位置
init_interface();
}
void init_interface(void) /* 初始化界面 */
{
int i;
struct menu_type *m;
setcursor(1,0);
textattr(7);
clrscr();
draw_text_frame(1,1,80,4,0,7);
draw_text_frame(1,23,80,25,1,7);
settextattr(1,1,80,4,(bgcolor<<4)+15);
settextattr(1,23,80,25,(bgcolor<<4)+15);
putsxy(version,2,2,(bgcolor<<4)+0xf);
putsxy(titles,(80-strlen(titles))/2,3,(bgcolor<<4)+0xa);
/*putsxy(prompt0,(80-strlen(prompt0))/2,4,(bgcolor<<4)+0x7);*/
putsxy(prompt1,2,24,(bgcolor<<4)+0xb);
putsxy(prompt4,(80-strlen(prompt3))/2,4,(bgcolor<<4)+0xb);
putchxy(0x10,25,3,(bgcolor<<4)+0xc);
putchxy(0x10,26,3,(bgcolor<<4)+0xa);
putchxy(0x10,27,3,(bgcolor<<4)+0xe);
putchxy(0x11,52,3,(bgcolor<<4)+0xe);
putchxy(0x11,53,3,(bgcolor<<4)+0xa);
putchxy(0x11,54,3,(bgcolor<<4)+0xc);
textwin(1,item_line+1,80,22,edit_bgcolor<<4,0);
draw_menu_line();
}
void draw_menu_line(void)
{
int i;
struct menu_type *m;
textwin(1,item_line,80,item_line,menu_line_color<<4,0); //画主菜单之间的空白
for(i=0;i<Max_menus;i++){
m=&main_menu[i];
put_item(m,0); //写各个主菜单
}
}
void draw_sub_menu(int menu_no,int enable) //画各个子菜单项
{
int i,x,y,s_w,s_h;
struct menu_type *m;
if(menu_no>=Max_menus) return;
m=&main_menu[menu_no];
x=m->left; y=m->top;
s_w=m->sub_width;
// if(menu_no==4)
// m->sub_menu_nums=sub_menu_nums[4];
s_h=m->sub_menu_nums*sub_item_height;
put_item(m,1);
if(m->sub_menu_nums){
gettext(x,y,x+s_w+2,y+s_h+2,scr_buff);
textwin(x+1,y+1,x+s_w+2,y+s_h+2,0x80,0);
textwin(x,y,x+s_w+1,y+s_h+1,0,1);
draw_text_frame(x,y,x+s_w+1,y+s_h+1,1,7);
i=(sub_menu_bgcolor<<4)+sub_menu_color;
textwin(x,y,x+s_w+1,y+s_h+1,i,0);
for(i=0;i<m->sub_menu_nums;i++){
putsxy(sub_menu[menu_no][i],x+1,y+1+i,15<<4); //显示菜单的字符
if(i==4)
/*if(menu_no==2)
{ if(menu_status==16)
putsxy(sub_menu[menu_no][i],x+1,y+1+i,15<<4);
else
putsxy(sub_menu[menu_no][i],x+1,y+1+i,(15<<4)+7);
}*/
if(i==2)
//if((menu_no==2)||(menu_no==5))
if(menu_no==5)
{ if(menu_status==16)
putsxy(sub_menu[menu_no][i],x+1,y+1+i,15<<4);
else
putsxy(sub_menu[menu_no][i],x+1,y+1+i,(15<<4)+7);
}
if(i==3)
//if((menu_no==2)||(menu_no==5))
if(menu_no==5)
{ if(menu_status==32)
putsxy(sub_menu[menu_no][i],x+1,y+1+i,15<<4);
else
putsxy(sub_menu[menu_no][i],x+1,y+1+i,(15<<4)+7); //使无效菜单变成灰色
}
}
if(enable) draw_roll_bar(menu_no,m->last_choice);
}
}
void clear_sub_menu(int menu_no)
{
int i,x,y,s_w,s_h;
struct menu_type *m;
if(menu_no>=Max_menus) return;
m=&main_menu[menu_no];
x=m->left; y=m->top;
s_w=m->sub_width;
s_h=m->sub_menu_nums*sub_item_height;
put_item(m,0); //刷新主菜单
if(m->sub_menu_nums){
puttext(x,y,x+s_w+2,y+s_h+2,scr_buff); //刷新子菜单项
}
}
void draw_roll_bar(int menu_no,int sub_no) //改变得到焦点的子菜单的颜色
{
int i,x,y,s_w;
struct menu_type *m;
if(menu_no>=Max_menus) return;
m=&main_menu[menu_no];
if(sub_no>=m->sub_menu_nums) return;
x=m->left; s_w=m->sub_width; y=m->top+1+sub_no;
i=(moving_bcolor<<4)+moving_tcolor;
textwin(x+1,y,x+s_w,y,i,0);
putsxy(sub_menu[menu_no][sub_no],x+1,y,i);
}
void clear_roll_bar(int menu_no,int sub_no) //当子菜单失去焦点时变回原来的颜色(白底黑字)
{
int i,x,y,s_w;
struct menu_type *m;
if(menu_no>=Max_menus) return;
m=&main_menu[menu_no];
if(sub_no>=m->sub_menu_nums) return;
x=m->left; s_w=m->sub_width; y=m->top+1+sub_no;
i=(sub_menu_bgcolor<<4)+sub_menu_color;
textwin(x+1,y,x+s_w,y,i-sub_menu_color,0);
putsxy(sub_menu[menu_no][sub_no],x+1,y,i);
}
void edit_chs(void)
{
int keys,index,value,dest;
int attr1=(bgcolor<<4)+0x0f,attr2=(moving_bcolor<<4)+11;
char str[80];
int attr0=(moving_bcolor<<4)+10;
int i,j,key,head[12],k=0;
int x,y;
long str_buff1[8];
char str_buff[10];
int lens=4;
int get_mess[8];
char *mess[ ]={"Boot indicator(E10):","Beginning head:",
"Beginning sector:","Beginning cylinder:",
"System indicator(E10):","Ending head:",
"Ending sector:","Ending cylinder:",0};
void *scr,*scr1;
int x1=12,y1=6,x2=65,y2=21;
setcursor(6,7);
//bootdisk(READ,0,drivers[0][1],drivers[0][0],buff);
if(exist_eint13()==0){ //如果不支持 E-INT13 则应调用 biosdisk << 注意:drivers[i][]已被修改为记录分区的扇区号、柱面号
biosdisk(2,0x80,0,drivers[0][1],drivers[0][0],1,buff);
}
else{
eint_disk_chs(READ,drivers[0][1],0,drivers[0][0],buff);
}
head[0]=buff[0x01be]; //分区的活动标志
head[1]=buff[0x01be+1]; //start Head
head[2]=buff[0x01be+2]&0x3f; //start Sector
head[3]=(buff[0x01be+2]>>6)*256+buff[0x01be+3]; //start Cylin
head[4]=buff[0x01be+4]; //分区类型标志
head[5]=buff[0x01be+5]; //end Head
head[6]=buff[0x01be+6]&0x3f; //end Sector
head[7]=(buff[0x01be+6]>>6)*256+buff[0x01be+7]; //end Cylin
for(i=0;i<8;i++)
str_buff1[i]=head[i];
for(i=0;i<8;i++)
get_mess[i]=strlen(mess[i]);
x=x1+1+get_mess[0];y=y1+5;
gotoxy(x1+1+get_mess[0],y1+5);
scr=malloc(4096);
scr1=malloc(4096);
gettext(x1,y1,x2,y2,scr);
textwin(x1,y1,x2,y2,attr0,1);
putsxy("This action can change data of Disk Partition Table.",x1+1,y1+1,attr2);
draw_text_frame(x1,y1,x2,y1+2,0,attr0);
draw_text_frame(x1,y1+3,x2,y2,1,attr0);
for(i=0;i<10;i++)
putchxy('
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -