📄 menu.c
字号:
/* menu.c - GUI menu control *//* Copyright(C) eyBuild Group, 2005, 2006. All Rights Reserved. *//*modification history--------------------01a, 2005-12-3, newzy author*//*DESCRIPTIONGUI menu control*/#include <stdio.h>#include <string.h>#include <stdarg.h>#include <ebrequest.h>#include <ebrespond.h>#include <eberror.h>#include <eblang.h>#include <webhandle.h>#include <menu.h>/* net */MENU_NODE menu_net[] = { {"/network/lan_setting.csp", "lansetting"}, {"/network/wan_setting.csp", "wansetting"}, {"/network/mac_setting.csp", "macclone"}, };/* dhcp */MENU_NODE menu_dhcp[] = { {"/dhcp/server.csp", "dhcpserver"}, {"/dhcp/clients.csp", "dhcpclients"}, {"/dhcp/fixmap.csp", "dhcpfixmap"}, };/* nat */ MENU_NODE menu_nat[] = { {"/nat/virtualserver.csp", "natvirtualserver"}, {"/nat/special_app.csp", "natspecial_app"}, {"/nat/dmz.csp", "natdmz"}, {"/nat/upnp.csp", "natupnp"}, };/* security */MENU_NODE menu_security[] = { {"/security/firewall.csp", "securityfirewall"}, // {"/security/ipfilter.csp", "securityipfilter"}, {"/security/domainfilter.csp", "securitydomainfilter"}, {"/security/macfilter.csp", "securitymacfilter"}, {"/security/remoteweb.csp", "securityremoteweb"}, {"/security/ping.csp", "securityping"}, };/* static route */MENU_NODE menu_route[] = {{"/route/static.csp", "routestatic"}, };/* system */MENU_NODE menu_system[] = { {"/system/upgrade.csp", "systemupgrade"}, {"/system/restore.csp", "systemrestore"}, {"/system/reboot.csp", "systemreboot"}, {"/system/account.csp", "systemaccount"}, {"/system/log.csp", "systemlog"} };#define NV(name) ARRAYNUM(name), &name[0]MENU_MANI_NODE menu_list[] = { {{"/basic/status.csp", "basicstatus"}, 0, NULL}, {{"/basic/guide.csp", "basicguide"}, 0, NULL}, {{"/network/lan_setting.csp", "network"}, NV(menu_net)}, {{"/dhcp/server.csp", "dhcpserver"}, NV(menu_dhcp)}, {{"/nat/virtualserver.csp", "nat"}, NV(menu_nat)}, {{"/security/firewall.csp", "security"}, NV(menu_security)}, {{"/route/static", "route"}, NV(menu_route)}, {{"/system/upgrade.csp", "systetool"}, NV(menu_system)},};#undef NVint check_id (unsigned mid, unsigned sid){ /* invalid main id */ if (mid >= sizeof(menu_list)/sizeof(menu_list[0])) { ebSendError(400, "main_id %d is too big.", mid); return -1; } /* no such sub node */ if (sid >= menu_list[mid].sub_num && 0 != sid) { ebSendError(400, "sub_id %d is too big.", sid); return -1; } return 0;}/* return the URL of the main-frame-page * if "" = MainID or "" == "SubID" then output default page. * result must as following format: * /cgi-bin/bbr.cgi?cgi=Status */int menu_get_page(void * fp, char * MainID, char * SubID){ unsigned mid = 0; // main ID unsigned sid = 0; // sub ID //char cginame[256] = ""; char * prefix; prefix = cgiPrefix(NULL); /* output the default page */ if ('\0' == MainID[0] || '\0' == SubID[0]) { print("%s/network/lan_setting.csp", prefix); return OK; } /* get mainId and subId */ mid = MainID[0] - 'A'; sid = SubID[0] - '0'; if (-1 == check_id(mid, sid)) return ERROR; if (NULL == menu_list[mid].subnode) { print("%s%s", prefix, menu_list[mid].node.pagename); } else { /* all right */ print("%s%s", prefix, menu_list[mid].subnode[sid].pagename); } return OK;}/* update menu and sub menu**/int menu_update(void * fp, char * MainID, char * SubID){ //char rom_base[256] = ""; char * rom_base = NULL; unsigned mid = 0; // main ID unsigned sid = 0; // sub ID unsigned i; int j; USE_LANG_SET(menu); /* get mainId and subId */ mid = MainID[0] - 'A'; sid = SubID[0] - '0'; /* out of range, * set to default to : network/lansetting */ if ( mid >= 8) mid = 2, sid = 0; rom_base = romPrefix(NULL); for (i=0; i<ARRAYNUM(menu_list); i++) { /* expand sub node */ print( " <TR>\n" " <TD class=onelevelsp width=10><IMG height=10 src=\"%s/rom/%s.gif\"\n" " width=10></TD>\n" " <TD class=onelevelsp colSpan=2 width=130><A class=tp1 href=\"\"\n" " onclick=\"return OnHrefClick('%c', '0');\"\n" " onmouseover=\"return ResetStatus('%s');\">%s%s%s</A></TD></TR>\n", rom_base, menu_list[i].subnode ? (mid==i ? "minus": "plus"): "pw", // has sub node or not 'A'+i, lang(menu_list[i].node.descripion), (mid == i) ? "<FONT color=#ff0000>": "", lang(menu_list[i].node.descripion), (mid == i) ? "</FONT>": "" ); if (mid != i) continue; for (j=0; j<(int)menu_list[i].sub_num; j++) { print( " <TR>\n" " <TD class=twolevel width=10><IMG height=10 src=\"%s/rom/sp.gif\"\n" " width=10></TD>\n" " <TD class=twolevel vAlign=center width=10><IMG height=10\n" " src=\"%s/rom/pw.gif\" width=10></TD>\n" " <TD class=twolevel width=120><A class=tp2 href=\"\"\n" " onclick=\"return OnHrefClick('%c', '%d');\"\n" " onmouseover=\"return ResetStatus('%s');\">" "%s%s%s</A></TD></TR>\n", rom_base, rom_base, 'A'+i, j, lang(menu_list[i].subnode[j].descripion), ((int)sid == j) ? "<FONT color=#ff0000>": "", lang(menu_list[i].subnode[j].descripion), ((int)sid == j) ? "</FONT>": "" ); } } return OK;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -