📄 access.c
字号:
#include "menu.h"
#include "tool.h"
#include "mytools.h"
#define ITEMS MAX_MENU_ITEMS /* 操作员最多使用项数, 即最大选择项数 */
extern int Access;
extern int G_start_menu_no;
char power_bak[ITEMS];
void ChgOperAccess();
int OperAccess(pPower)
char *pPower;
{
struct S_menu_a SMenuActiveStatusBak[MAXSCR];
struct S_item_info_struc item_info_bak[MAXITEM];
char sFileName[128];
int i;
sprintf(sFileName, "/tmp/.access.%d.oper", getpid());
scr_dump(sFileName);
/*
* 将参数传来的权限组设置为菜单运行权限组
*/
i = 0;
while (1) {
if (i >= iMenuItemCount || SMenuItem[i].iChildMenu == 99 || !strcmp(SMenuItem[i].sItemId, "I_END"))
break;
power_bak[i] = (char)SMenuItem[i].iPower;
if (pPower[0] != -1)
SMenuItem[i].iPower = (int)pPower[i];
i++;
}
for (i = 0; i < MAXSCR; i++)
memcpy(SMenuActiveStatusBak + i, SMenuActiveStatus + i,
sizeof(struct S_menu_a));
for (i = 0; i < MAXITEM; i++)
memcpy(item_info_bak + i, SItemInfo + i,
sizeof(struct S_item_info_struc));
ChgOperAccess();
/*
* 修改权限模板后恢复原权限值,以便继续运行
*/
i = 0;
while (1) {
if (i >= iMenuItemCount
|| SMenuItem[i].iChildMenu == 99
|| !strcmp(SMenuItem[i].sItemId, "I_END"))
break;
pPower[i] = (char)SMenuItem[i].iPower;
SMenuItem[i].iPower = (int)power_bak[i];
i++;
}
for (i = 0; i < MAXSCR; i++)
memcpy(SMenuActiveStatus + i, SMenuActiveStatusBak + i, sizeof(struct S_menu_a));
for (i = 0; i < MAXITEM; i++)
memcpy(SItemInfo + i, item_info_bak + i,
sizeof(struct S_item_info_struc));
/*
* 改变角色权限后另外显示主菜单以便画面不乱
DispMainMenu(stdscr, SMenuActiveStatus[0].iItem);
*/
scr_restore(sFileName);
unlink(sFileName);
return(0);
}
/*
* 修改角色操作权限
*/
void ChgOperAccess()
{
FILE *pMyMenuFd;
char sFileName[128];
int i, iOldMenu, iNewMenu, iMenuItemQue, iLocateItem, iRet;
char *pWorkDir;
WINDOW *wWin;
wWin = stdscr;
pWorkDir = (char *)getenv("WORKDIR");
if (pWorkDir == NULL) {
mvprintw(LINES-1, 0, "WORKDIR not set.");
return;
}
sprintf(sFileName, "%s%s", pWorkDir, MENU_f);
pMyMenuFd = fopen(sFileName, "r");
if (pMyMenuFd == NULL) {
mvprintw(LINES-1, 0, "FIle %s open error.", sFileName);
return;
}
for (i = 4; i < 20; i++) {
move(i, 0);
clrtoeol();
}
move(21, 0);
clrtoeol();
h_prompt(21, 1, " SPACEBAR : 切换选择 ESCAPE : 退出权限设置 ", 0, 0);
DispBelow("权限设置");
if (!strcmp(G_oper_no, "00")) {
/*
* 若是00操作员,则放开所有菜单选择项,以便赋给
* 其他操作员
*/
for (i = 0; i < iMenuItemCount; i++)
SMenuItem[i].iPower = 1;
}
/*
* 置权限设置标志
*/
Access = 1;
for (i = 0; i < iMenuCount; i++) {
iRet = 0;
while (1) {
iLocateItem = SMenu[i].iMenuItemSet[iRet];
if (iLocateItem == -1) {
iRet = -1;
break;
}
if (power_bak[iLocateItem])
break;
iRet++;
}
SMenuActiveStatus[i].iItem = iRet;
}
iOldMenu = G_start_menu_no;
SMenuActiveStatus[iOldMenu].iFatherMenu = -1;
iLocateItem = SMenuActiveStatus[iOldMenu].iItem;
while (1) {
iRet = DispMenu(wWin, iOldMenu, &iLocateItem, pMyMenuFd);
if (iRet == ERR_MENU)
break;
if (iRet == CLOSE) {
i = 0;
while (1) {
iLocateItem = SMenu[iOldMenu].iMenuItemSet[i];
if (iLocateItem == -1) {
i = -1;
break;
}
if (power_bak[iLocateItem]) break;
i++;
}
SMenuActiveStatus[iOldMenu].iItem = i;
iOldMenu = SMenuActiveStatus[iOldMenu].iFatherMenu;
iLocateItem = SMenuActiveStatus[iOldMenu].iItem;
continue;
}
if (iRet == OPEN_RIGHT) {
SMenuActiveStatus[iOldMenu].iItem = iLocateItem;
iOldMenu = SMenuActiveStatus[iOldMenu].iFatherMenu;
iLocateItem = SMenuActiveStatus[iOldMenu].iItem;
while (1) {
iLocateItem++;
if (SMenu[iOldMenu].iMenuItemSet[iLocateItem] == -1)
iLocateItem = 0;
i = SMenu[iOldMenu].iMenuItemSet[iLocateItem];
if (power_bak[i]) break;
}
DispMenuItem0(wWin, iOldMenu, iLocateItem);
} else if (iRet == OPEN_LEFT) {
SMenuActiveStatus[iOldMenu].iItem = iLocateItem;
iOldMenu = SMenuActiveStatus[iOldMenu].iFatherMenu;
iLocateItem = SMenuActiveStatus[iOldMenu].iItem;
while (1) {
if (iLocateItem == 0)
while (SMenu[iOldMenu].iMenuItemSet[iLocateItem + 1] != -1)
iLocateItem++;
else
iLocateItem--;
i = SMenu[iOldMenu].iMenuItemSet[iLocateItem];
if (power_bak[i]) break;
}
DispMenuItem0(wWin, iOldMenu, iLocateItem);
}
iMenuItemQue = SMenu[iOldMenu].iMenuItemSet[iLocateItem];
switch ( SMenuItem[iMenuItemQue].cProcType ) {
case 'E': /* 返回上级菜单 */
i = 0;
while (1) {
iLocateItem = SMenu[iOldMenu].iMenuItemSet[i];
if (iLocateItem == -1) {
i = -1;
break;
}
if (power_bak[iLocateItem]) break;
i++;
}
SMenuActiveStatus[iOldMenu].iItem = i;
iOldMenu = SMenuActiveStatus[iOldMenu].iFatherMenu;
iLocateItem = SMenuActiveStatus[iOldMenu].iItem ;
touchwin(wWin);
wrefresh(wWin);
break;
case 'F': /* 无下级菜单 */
break;
case 'M': /* 下级菜单 */
SMenuActiveStatus[iOldMenu].iItem = iLocateItem;
iNewMenu = SMenuItem[iMenuItemQue].iChildMenu;
SMenuActiveStatus[iNewMenu].iFatherMenu = iOldMenu;
iLocateItem = SMenuActiveStatus[iNewMenu].iItem;
iOldMenu = iNewMenu; /* iNewMenu 为新的菜单号 */
break;
default: /* */
break;
}
}
Access = 0;
fclose(pMyMenuFd);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -