📄 comment.cpp
字号:
inschstr(key, pos, value); modi = 1; pos++; } else beep(); else if (pos < len) { value[pos] = key; pos++; modi = 1; } else beep(); else switch (key) { case 3: eflag = 0; break; case 10: eflag = 0; break; case 9: if (strlen(hlp) > 0) { showtmessage(hlpy, hlpx, "[提 示]", (char *)hlp); touchwin(win); } break; case 4: eflag = 0; break; case 1: ins = !ins; break; case 24: delchstr(value, pos); modi = 1; break; case 260: if (pos > 0) pos--; else eflag = 0; break; case 259: eflag = 0; break; case 258: eflag = 0; break; case 25: eflag = 0; break; case 16: eflag = 0; break; case 261: if (pos < rlen) pos++; else { beep(); eflag = 0; } break; case 8: if (pos > 0) { pos--; delchstr(value, pos); modi = 1; } else beep(); break; default: eflag = 0; break; } } if (modi) key = -key; return(key);}/*状态条*/WINDOW *statusbar;void initstatusbar(void){ statusbar = newwin(1, 80, 24, 0);}void freshstatusbar(char *str){ if (statusbar != NULL) { wclrscr(statusbar); mvwaddstr(statusbar, 0, 0, str); wrefresh(statusbar); }}/*保存当前屏幕*/int savescr(char *scrfile){ FILE * fp; if ((fp = fopen(scrfile, "w+")) == NULL) return(1); putwin(curscr, fp); fclose(fp); return(0);}/*恢复以前保存过的屏幕*/int restorescr(char *scrfile){ FILE * fp; WINDOW * win; if ((fp = fopen(scrfile, "r+")) == NULL) return(1); win = getwin(fp); fclose(fp); remove(scrfile); touchwin(win); wrefresh(win); return(0);}/*通用帮助*/int help(char *title, char *fname, char *startstr, char *endstr){ /*** void showmessage(int,int,char *); int savescr(char *); void framewin(WINDOW *,int,char *,int); void outstr(WINDOW *,int,int,int,char *); int restorescr(char *); ***/ unsigned short startcol = 1, hs, dqhs = 1, pos = 0, currcol; char info[12000][560]; int key, i, hflag = 1, pflag = 1; char colstr[1200]; char str[20][74]; char lpcommand[40] = "lp "; char flagstr[4]; WINDOW * win; FILE * fp; char scrname[20]; /*showmessage(10,30,"aaaasfdsafkdsf");*/ sprintf(scrname, "scrhelp%d", getpid()); if ((fp = fopen(fname, "r")) == (FILE * )0) { showmessage(9, 30, " 打开帮助文件失败!"); return(1); } bzero(info, sizeof(info)); if (startstr[0] != 0) do { if (fgets(colstr, 1200, fp) == NULL) return(2); colstr[strlen(colstr)-1] = '\0'; } while (strcmp(colstr, startstr)); hs = 0; if (strlen(endstr) != 0) do { if (fgets(info[hs], 1200, fp) == NULL) return(3); info[hs][strlen(info[hs])-1] = '\0'; strncpy(flagstr, info[hs], 3); if ((strncmp("<<<", flagstr, 3)) && (strncmp(">>>", flagstr, 3) && (info[hs][0] != 0))) hs++; } while (strcmp(info[hs], endstr));else while (!feof(fp)) { fgets(info[hs], 1200, fp); info[hs][strlen(info[hs])-1] = '\0'; strncpy(flagstr, info[hs], 3); if ((strcmp("<<<", flagstr)) && (strcmp(">>>", flagstr) && (info[hs][0] != 0))) hs++; }info[hs][0] = 0;fclose(fp);(void)savescr(scrname);win = newwin(24, 78, 0, 0);framewin(win, '\070', title, '\017');delwin(win);wrefresh(win);win = newwin(22, 74, 1, 2);raw();keypad(win, 1);wmove(win, 21, 0);wattron(win, A_BOLD | A_STANDOUT | COLOR_PAIR('\047'));waddstr(win, " ↑上 ↓下 →下页 ←上页 [左页 ]右页 ");wattroff(win, A_BOLD | A_STANDOUT | COLOR_PAIR('\047'));wrefresh(win);while (1){ currcol = (dqhs - 1 + 20) % 20; if (pflag) { for (i = 0; i < 20; i++) if (startcol + i - 1 >= hs) str[i][0] = 0; else if (strlen(info[startcol-1+i]) > pos) strncpy(str[i], &info[startcol-1+i][pos], 74); else str[i][0] = '\0'; for (i = 0; i < 20; i++) outstr(win, i + 1, 0, 74, str[i]); } if (hflag || pflag) { wmove(win, 0, 0); wattron(win, A_BOLD | A_STANDOUT | COLOR_PAIR('\047')); wprintw(win, "第%4d行 总行数%4d ", dqhs, hs); wattroff(win, A_BOLD | A_STANDOUT | COLOR_PAIR('\047')); wattron(win, A_REVERSE); outstr(win, currcol + 1, 0, 74, str[currcol]); wmove(win, currcol + 1, 0); wattroff(win, A_REVERSE); wrefresh(win); hflag = 0; pflag = 0; } key = wgetch(win); switch (key) { case 4: clear(); refresh(); delwin(win); (void)restorescr(scrname); return(1); break; case 91: if (pos > 0) { pos -= 58; pflag = 1; } break; case 93: pos += 58; pflag = 1; break; case 259: if (dqhs == 1) beep(); else if (currcol == 0) if (startcol > 1) { pflag = 1; hflag = 1; dqhs -= 1; startcol -= 20; } else beep(); else { outstr(win, currcol + 1, 0, 74, str[currcol]); dqhs -= 1; hflag = 1; } break; case 258: if (dqhs == hs) beep(); else if (currcol == 20 - 1) if (startcol < hs) { pflag = 1; hflag = 1; dqhs += 1; startcol += 20; } else beep(); else { outstr(win, currcol + 1, 0, 74, str[currcol]); dqhs += 1; hflag = 1; } break; case 260: if (startcol > 20) { pflag = 1; hflag = 1; startcol -= 20; dqhs = startcol + 20 - 1; } else beep(); break; case 261: if ((startcol + 20 - 1) < hs) { pflag = 1; hflag = 1; startcol += 20; dqhs = startcol; } else beep(); break; case 16: strcat(lpcommand, fname); strcat(lpcommand, " 1>/dev/null" ); showmessage(4, 4, " 联好打印机"); touchwin(win); wrefresh(win); system(lpcommand); break; default: beep(); }}}/* 通用菜单 *//*1--数据类型*//***typedef struct{ char title[40]; char fname[30]; char startstr[20]; char endstr[20];}Ohelp; struct Item{ char hotkey; int y,x; char rthelp[80]; Ohelp *olhelp; char caption[40]; void (*click)(); char select; struct Item *up; struct Item *down; struct Item *left; struct Item *right;};typedef struct Item ITEM;typedef struct{ WINDOW *win; unsigned int row,pos; int count; char hotkeys[40]; char title[40]; ITEM *curitem; ITEM *items;} MENU;***//*初使化活动菜单项模块1*//*#define inititem(a,b,c,d) inithitem(a,b,c,d,"")*/void inithitem(ITEM *item, char *caption, char hotkey, void click(), char *rthelp){ strcpy(item->caption, caption); strcpy(item->rthelp, rthelp); item->olhelp = NULL; item->hotkey = hotkey; item->click = click; item->select = 0;}/*初始化活动菜单模块2*/void initmenu(MENU *menu, int y, int x, char *title, int row, ITEM *items, int count){ int i = 4, j = 0; menu->count = count; strcpy(menu->title, title); menu->row = row; menu->items = items; menu->curitem = items; for (menu->pos = 0; menu->pos < menu->count; menu->pos++) { j++; menu->hotkeys[menu->pos] = items[menu->pos].hotkey; if (j > row) i += (strlen(items->caption) + 8), j = 1; menu->items[menu->pos].x = i; menu->items[menu->pos].y = j; menu->items[menu->pos].up = &items[(menu->pos+menu->count-1)%menu->count]; menu->items[menu->pos].down = &items[(menu->pos+menu->count+1)%menu->count]; menu->items[menu->pos].left = &items[(menu->pos+menu->count-menu->row)%menu->count]; menu->items[menu->pos].right = &items[(menu->pos+menu->count+menu->row)%menu->count]; } menu->pos = 0; menu->hotkeys[menu->count] = 0; i += strlen(items->caption) + 8; menu->win = newwin(row + 2, i, y, x);}static void drawitem(MENU menu, ITEM *item, int hot){ wmove(menu.win, item->y, item->x); if (hot) wattron(menu.win, A_STANDOUT | COLOR_PAIR('\017')); else { wattroff(menu.win, A_STANDOUT); wattron(menu.win, COLOR_PAIR('\070')); } if (item->select == 1) waddch(menu.win, '>'); else waddch(menu.win, ' '); if (item->hotkey != ' ') { waddch(menu.win, item->hotkey); waddstr(menu.win, "__"); } else waddstr(menu.win, ""); waddstr(menu.win, item->caption); wrefresh(menu.win); if (hot) wattroff(menu.win, A_STANDOUT | COLOR_PAIR('\017'));}static void drawmenu(MENU menu){ int i; framewin(menu.win, '\070', menu.title, '\017'); for (i = 0; i < menu.count; i++) { drawitem(menu, &menu.items[i], 0); } drawitem(menu, menu.curitem, 1);}/*运行活动菜单模块*/void runmenu(MENU menu){ /*** void freshstatusbar(WINDOW *,char *); void drawmenu(MENU); void wclrscr(WINDOW *); void drawitem(MENU,ITEM,int); int help(char *,char *,char *,char *); int posch(char *,char); ***/ int key, i; ITEM * item; char change = 0; FILE * fp; WINDOW * win; freshstatusbar(menu.curitem->rthelp); drawmenu(menu); (void)savetty(); item = menu.curitem; raw(); keypad(menu.win, 1); do { if (change) { freshstatusbar(menu.curitem->rthelp); drawitem(menu, item, 0); drawitem(menu, menu.curitem, 1); item = menu.curitem; change = !change; } key = wgetch(menu.win); switch (key) { case 10: menu.curitem->select = 1; drawitem(menu, menu.curitem, 0); if (menu.curitem->click != NULL) menu.curitem->click(); menu.curitem->select = 0; freshstatusbar(menu.curitem->rthelp); drawitem(menu, menu.curitem, 1); touchwin(menu.win); wrefresh(menu.win); break; case 259: if ((menu.curitem->up != NULL) && menu.curitem->up != menu.curitem) { change = 1; menu.curitem = menu.curitem->up; menu.pos = (menu.pos + menu.count - 1) % menu.count; } break; case 258: if ((menu.curitem->down != NULL) && menu.curitem->down != menu.curitem) { change = 1; menu.curitem = menu.curitem->down; menu.pos = (menu.pos + menu.count + 1) % menu.count; } break; case 260: if ((menu.curitem->left != NULL) && menu.curitem->left != menu.curitem) { change = 1; menu.curitem = menu.curitem->left; menu.pos = (menu.pos + menu.count - menu.row) % menu.count; } break; case 261: if ((menu.curitem->right != NULL) && menu.curitem->right != menu.curitem) { change = 1; menu.curitem = menu.curitem->right; menu.pos = (menu.pos + menu.count + menu.row) % menu.count; } break; case 4: wstandend(menu.win); wattroff(menu.win, A_STANDOUT | A_COLOR); wclrscr(menu.win); wrefresh(menu.win); (void)resetty(); break; case 9: if (menu.curitem->olhelp != NULL) { help(menu.curitem->olhelp->title, menu.curitem->olhelp->fname, menu.curitem->olhelp->startstr, menu.curitem->olhelp->endstr); } default: if ((key > 40) && (key < 127)) { if (islower(key)) key = toupper(key); i = posch(menu.hotkeys, key); if (i >= 0) if ((menu.curitem->hotkey) != key) { item = menu.curitem; change = 1; menu.curitem = &menu.items[i]; } } } } while (key != 4);}static void popmenu(MENU menu){ /*** void drawmenu(MENU); void freshstatusbar(WINDOW *,char *); void drawitem(MENU,ITEM *,int); void wclrscr(WINDOW *); int help(char *,char *,char *,char *); int posch(char *,char); ***/ int key, i; ITEM * item; char change = 0; FILE * fp; WINDOW * win; drawmenu(menu); savetty(); item = menu.curitem; raw(); keypad(menu.win, 1); do { if (change) { freshstatusbar(menu.curitem->rthelp); drawitem(menu, item, 0); drawitem(menu, menu.curitem, 1); item = menu.curitem; change = !change; } key = wgetch(menu.win); switch (key) { case 10: wclrscr(menu.win); wrefresh(menu.win); menu.curitem->click(); return; case 259: if ((menu.curitem->up != NULL) && menu.curitem->up != menu.curitem) { change = 1; menu.curitem = menu.curitem->up; menu.pos = (menu.pos + menu.count - 1) % menu.count; } break; case 258: if ((menu.curitem->down != NULL) && menu.curitem->down != menu.curitem) { change = 1; menu.curitem = menu.curitem->down; menu.pos = (menu.pos + menu.count + 1) % menu.count; } break; case 260: if ((menu.curitem->left != NULL) && menu.curitem->left != menu.curitem) { change = 1; menu.curitem = menu.curitem->left; menu.pos = (menu.pos + menu.count - menu.row) % menu.count; } break; case 261: if ((menu.curitem->right != NULL) && menu.curitem->right != menu.curitem) { change = 1; menu.curitem = menu.curitem->right; menu.pos = (menu.pos + menu.count + menu.row) % menu.count; } break; case 4: wstandend(menu.win); wattroff(menu.win, A_STANDOUT | A_COLOR); wclrscr(menu.win); wrefresh(menu.win); resetty(); break; case 9: if (menu.curitem->olhelp != NULL) { help(menu.curitem->olhelp->title, menu.curitem->olhelp->fname, menu.curitem->olhelp->startstr, menu.curitem->olhelp->endstr); } default: if ((key > 40) && (key < 127)) { if (islower(key)) key = toupper(key); i = posch(menu.hotkeys, key); if (i >= 0) if ((menu.curitem->hotkey) != key) { item = menu.curitem; change = 1; menu.curitem = &menu.items[i]; } } } } while (key != 4);}/*以密码的形式输入字符串*/int inputpass(WINDOW *win, int y, int x, int leng, char *s, int type, int helpy, int helpx, char *helpstr){ int funstatus(int , char ); char tmpstr[512]; int cur_posi, j, modiflag, lflag, rflag, endloop; int y1, x1, yend, xend; static int insflag = 1; *(s+0) = 0; for(j=0;j<leng;j++) *(s+j)=' '; *(s+j)=0; cur_posi = 0; modiflag = 0; endloop = 0; yend = y; xend = x + leng - 1; for(j=0;j<leng;j++) tmpstr[j]='*'; tmpstr[j]=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -