int default_action(int msg) { switch(msg) { case NEXT:deselectitem();nextitem();selectitem();break; case PREV:deselectitem();previtem();selectitem();break; case FORW:deselectitem();rightitem();selectitem();break; case BACK:deselectitem();leftitem();selectitem();break; case 'e': case '\n': case '\r': do_ok(msg);break; case 0x1b:deselectitem();setup_flag=-1;break; case UPDATE: default_update();break; case UPDATE1: default_update1();break; case TIMER: case CLEAN: printmenu();break; default: if(msg>='1' && msg <= '9')default_digital(msg); else return 0; break; } return 1; }
static void edit_ok(int msg) { if(item<=envs_local) { strcpy(myline,envp_local[item-1]); if(menu[item].arg)free(menu[item].arg); __cprint(INFO_Y,0,INFO_W,0x7,myline); edit_cmdline1(myline); __cprint(INFO_Y,0,INFO_W,0x70,myline); envp_local[item-1]=menu[item].arg=malloc(strlen(myline)+1); strcpy(menu[item].arg,myline); selectitem(); } else if(item<items_edit) //run { if(msg=='e') { strcpy(myline,menu[item].arg); free(menu[item].arg); __cprint(INFO_Y,0,INFO_W,0x7,myline); edit_cmdline2(myline); menu[item].arg=malloc(strlen(myline)+1); strcpy(menu[item].arg,myline); __cprint(INFO_Y,0,INFO_W,0x70,expand(menu[item].arg)); } else { __popdown(POP_Y,POP_X,POP_H,popwidth); do_cmd(expand(menu[item].arg)); __popup(POP_Y,POP_X,POP_H,popwidth); printmenu(); } } }
static void printmenu(void) { int olditem=item; for(item=0;menu[item].msg;item++) { if(item==olditem)continue; if(menu[item].action && menu[item].action(UPDATE))continue; if(Menu->action && Menu->action(UPDATE))continue; default_action(UPDATE); } item=olditem; selectitem(); }
static int default_digital(int msg) { char *p,*cmd; switch(menu[item].type) { case TYPE_CMD: if(!ischoice(menu[item].msg))return 1; p=getchoice(menu[item].msg,msg-'0'); if(!p)return 1; cmd=expand(getItemCmd(p)); do_cmd(cmd); selectitem(); break; default:return 0; } return 1; }
static int gm_mode(int k, int *pos) { const char *items[2] = {"A-type", "B-type"}; union val v; int i; int ret; v.integ = getopt_int("", "mode"); i = 1-!(v.integ & MODE_BTYPE); ret = selectitem(items, 2, &i, k); if (ret && k) { if (i) v.integ |= MODE_BTYPE; else v.integ &= ~MODE_BTYPE; setoption("", "mode", v, 0); } return ret; }
static int op_bgdot(int k, int *pos) { const char *items[3] = {"dot", "bullet", "blank"}; int n = 3; int i = 0; int j; if (isprintable(k)) { if (k == '0') bgdot = ' '; else if (k == '~') bgdot = BULLET; else bgdot = k; save_bgdot(); k = 0; } if (_ASCII) { items[1] = items[2]; n--; } else if (bgdot == BULLET) i = 1; if (bgdot == ' ') i = n-1; j = i; k = selectitem(items, n, &i, k); if (i != j) { if (i == 0) bgdot = '.'; else if (i == n-1) bgdot = ' '; else bgdot = BULLET; save_bgdot(); } if (k != 1) return k; putch(bgdot); putch(' '); return 1; }