📄 help.bak
字号:
/***** 联机帮助系统 1998/11** ** 说明: 从HELPFILE读取信息生成联机帮助 ** ** ** ***/#include "apmenu.h"#define HELPFILE "./HELP"#define HELPMSG "提示:[End]退出,[Home]菜单,光标移到<<..>>按回车进入该主题"#define MENUHELPMSG "提示:[BackSpace] 退出一层菜单, [回车] 进行选择 "#define Y 3#define X 9#define WIDTH 60#define HEIGHT 18char text[500][82];char Nxt_Topic[80];int NREC;char NextTopic[80];int tFlags=0; struct Help_link { /*******联机帮助系统主题跳转链表*******/ char topic[82]; int ny; int nx; int nrec; int nline; int nrow; struct Help_link *nxtlink; struct Help_link *prvlink;};struct Help_link *Link_head,*Link_cur;/***** 联机帮助系统循环主体***/int Disp_Help( w, y, x, height, width, topic, bkcolor ) WINDOW *w; int y;int x; int height; int width; char *topic;int bkcolor;{ int TopicColor,result; char topic_bak[80]; int ny,nx; int fontcolor=WHITE,fontbkcolor=BLACK; int ch,nrec=0,nline=0,nrow=0,i; SAVESCR *scr; char mesg[256]; extern int Initarry(); extern int Show_arry(); extern int Do_menu(); extern int Show_Mainmenu(); extern int Print_Cur_Topic(); extern int p(); ny=y+2;nx=x+2; if ( bkcolor != GRAY) bkcolor = GRAY ; else bkcolor = YELLOW; TopicColor = BLUE; scr = (SAVESCR *) Saverect( w, height, width, y, x ); /*-------------- 进入前分配显示数组 ----------------*/ if( Initarry ( w, width-4 , topic, HELPFILE )==TRUE ){ Add_link( topic, ny, nx, nrec, nline, nrow ); } else { Free_link(); return (FALSE); } /*-------------------- 主题循环 --------------------------------*/ while( 1 ){ /*------------------- 界面 -----------------------------*/ if ( tFlags == 1 ) wstandout(w); wsetcolor( w, BLACK, GRAY ); mvwaddstr( w, y, x, "━"); wsetcolor( w, WHITE, BLUE ); for( i=x+2;i<x+width;i++) mvwaddstr( w, y, i, " "); mvwaddstr( w, y, x+2, topic); wsetcolor( w, BLUE, CYAN ); for( i=x+1;i<x+width;i++) mvwaddstr( w, y+1, i, " "); for( i=y+1;i<y+height-1;i++)mvwaddstr( w, i, x, " "); for(i=y+1;i<y+height-1;i++)mvwaddstr(w,i,x+width-2," "); for(i=x+1;i<x+width-1;i++)mvwaddstr(w,y+height-2,i, " "); if ( tFlags == 1 ) wstandend(w); Clear( w, height-5, width-4, y+2, x+2, fontbkcolor ); Show_arry(w, y+2,x+2,height-4, width-4, nrec, fontcolor, fontbkcolor ); wmove( w, ny, nx); wrefresh( w ); /*------------------ 键盘循环 -----------------------*/ while ( 1 ){ ch = (int)getch(); if ( ch == Key_esc && getch()==91) { ch = getch(); if ( ch == Key_up ){ if ( nline > 0 ){ nline --; ny=w->_cury-1; nx=w->_curx; Show_NxtTopic(w,ny,x+2,ny+1,nrec+nline, nrec+nline+1, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } else if (nrec !=0){ nrec --; Show_arry(w,y+2,x+2,height-4, width-4, nrec,fontcolor, fontbkcolor); Show_NxtTopic(w,ny,x+2,-1, nrec+nline, nrec+nline+1, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } } if ( ch == Key_down ) { if ( nline < (height -5 ) ){ nline ++; ny=w->_cury+1; nx=w->_curx; Show_NxtTopic(w,ny,x+2,ny-1,nrec+nline, nrec+nline-1, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } else if ( nrec+height-3 < NREC ){ nrec ++; Show_arry(w, y+2,x+2,height-4, width-4, nrec, fontcolor, fontbkcolor ); Show_NxtTopic(w,ny,x+2,ny-1, nrec+nline, nrec+nline-1, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } } if ( ch == Key_right ) { if ( nrow < ( width - 5 ) ){ nrow ++; ny=w->_cury; nx=w->_curx+1; Show_NxtTopic(w,ny,x+2,ny,nrec+nline, nrec+nline, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } } if ( ch == Key_left ) { if ( nrow >0 ){ nrow --; ny=w->_cury; nx=w->_curx-1; Show_NxtTopic(w,ny,x+2,ny,nrec+nline, nrec+nline, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } } if ( ch == Key_pageup ) { if ( nrec > height-5 ){ nrec = nrec - height + 5 ; Show_arry(w, y+2,x+2,height-4, width-4, nrec, fontcolor, fontbkcolor ); Show_NxtTopic(w,ny,x+2,-1, nrec+nline, nrec+height-5+nline, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } else { nrec= 0; Show_arry(w, y+2,x+2,height-4, width-4, 0, fontcolor, fontbkcolor ); Show_NxtTopic(w,ny,x+2,-1,0+nline, nrec+nline, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } } if ( ch == Key_pagedown ) { if ( nrec+height-3+height-6 < NREC ){ nrec = nrec + height - 5 ; Show_arry(w, y+2,x+2,height-4, width-4, nrec, fontcolor, fontbkcolor ); Show_NxtTopic(w,ny,x+2,-1,nrec+nline, nrec-height+5+nline, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } else { nrec=NREC-(height-5); if( nrec < 0 ) nrec = 0; Show_arry(w, y+2,x+2,height-4, width-4, nrec, fontcolor, fontbkcolor ); Show_NxtTopic(w,ny,x+2,-1, nrec+nline, nrec+nline, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } } if ( ch==Key_end ) { Free_link(); return (FALSE); } } if ( ch == Key_tab ) { if ( nrow + 9 <= width - 5 ){ nrow = nrow + 9; ny=w->_cury; nx=w->_curx+9; Show_NxtTopic(w,ny,x+2,ny,nrec+nline, nrec+nline, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } else { nrow = width-5 ; ny=w->_cury; nx= width-3+x ; Show_NxtTopic(w,ny,x+2,ny,nrec+nline, nrec+nline, nrow,fontcolor,fontbkcolor); wmove(w,ny,nx ); wrefresh( w ); } } if (ch == Key_backspace ) { if ( Link_cur!=Link_head ){ /** 删除当前链表 **/ Del_link(); /** 获取当前链表环境 **/ strcpy(topic,Link_cur->topic); ny=Link_cur->ny; nx=Link_cur->nx; nrec=Link_cur->nrec; nline=Link_cur->nline; nrow=Link_cur->nrow; Initarry ( w, width-4 , topic, HELPFILE ) ; break; } } if (ch == Key_enter) { if ( Nxt_Topic[0]!='\x0') { strcpy ( topic_bak, topic ); strcpy ( topic, Nxt_Topic ); if( Initarry ( w, width-4 , topic, HELPFILE ) ==TRUE ){ /** 保存当前的环境 **/ Link_cur->ny=ny; Link_cur->nx=nx; Link_cur->nrec=nrec; Link_cur->nline=nline; Link_cur->nrow=nrow; /** 设置新的环境 **/ nrec=0;nline=0;nrow=0; ny=y+2; nx=x+2; Add_link( topic, ny, nx, nrec, nline, nrow ); } else strcpy ( topic, topic_bak ); break; } } /*** 当弹出菜单时的循环 ***/ if (ch == Key_home ) { if( tFlags != 1){ wstandout( w ); mvwaddstr( w, Y+HEIGHT-2, X+2, MENUHELPMSG ); wstandend( w ); } else { wsetcolor( w, CYAN, GRAY ); mvwaddstr( w, Y+HEIGHT-2, X+2, MENUHELPMSG ); } wrefresh(w); result=Do_menu(stdscr,y+1,x+2,bkcolor,0); if( tFlags != 1){ wstandout( w ); mvwaddstr( w, Y+HEIGHT-2, X+2, HELPMSG ); wstandend( w ); } else { wsetcolor( w, CYAN, GRAY ); mvwaddstr( w, Y+HEIGHT-2, X+2, HELPMSG ); } wrefresh(w); if ( result ==13) { Free_link(); return FALSE; } else if(result==11||result==31||result==32) { /** 设置新的环境 **/ strcpy( topic_bak, topic ); if ( result==11) strcpy(topic,"主题"); else if ( result==31) strcpy(topic,"帮助"); else if ( result==32) strcpy(topic,"关于"); if( Initarry ( w, width-4 ,topic, HELPFILE ) ==TRUE ){ /** 保存当前的环境 **/ Link_cur->ny=ny; Link_cur->nx=nx; Link_cur->nrec=nrec; Link_cur->nline=nline; Link_cur->nrow=nrow; nrec=0;nline=0;nrow=0; ny=y+2; nx=x+2; Add_link( topic, ny, nx, nrec, nline, nrow ); } else strcpy( topic, topic_bak ); break; } else if(result==12) { if ( Link_cur==Link_head ){ Message(stdscr,Y+HEIGHT-2,X+2, "没有可进入的上个主题", "提示:",1); wmove( w, ny,nx ); wrefresh(w); } else { /** 删除当前链表 **/ Del_link(); /** 获取当前链表环境 **/ strcpy(topic,Link_cur->topic); ny=Link_cur->ny; nx=Link_cur->nx; nrec=Link_cur->nrec; nline=Link_cur->nline; nrow=Link_cur->nrow; Initarry ( w, width-4 , topic, HELPFILE ) ; break; } } else if(result==21) { sprintf(mesg,"打印当前主题,共%d行", NREC); if(Message(stdscr,Y+HEIGHT-2,X+2,mesg, "确认",0) == TRUE ) { Print_Cur_Topic(); } wmove( w, ny,nx );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -