⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 power.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
字号:
/*
 * 周国祥 2001/04/06 修改操作员库表处理
 *
 *	2001/04/16 modified init_power()
 *	2001/04/16 modified lpower==>purview_key
 *		原权限放在center_oper表中,用操作员的密码加密存放;
 *		目前,权限该放在sys_role表,只能用统一的purview_key加密;
 *		或再加上角色代码???
 */

#include <stdio.h>
#include "../bcs/menu.h"
#include "all.h"

#define ITEMS 256	/* 与MAX_MENU_ITEMS同 */

EXEC SQL INCLUDE sqlca;
EXEC SQL WHENEVER SQLERROR CALL error_handler;
EXEC SQL WHENEVER SQLWARNING CALL warning_handler;
EXEC SQL WHENEVER NOT FOUND CALL notfound_handler;

char	purview_key[4] = "1996";

/*
 * 菜单权限解析处理
 */
int init_power(oper)
char *oper;
{
	int i, j, k, sum = 0, stop = 0;
	char flag;
	$char oper_no[7];
	char	role_code[4];
	char	purview[257];	/* 只用前64(ITEMS/4)个字符 */
	
	if (get_role_purview(oper, role_code, purview) < 0)
		return(-1);

	for (i = 0; i < ITEMS / 4; i++) {
		flag = purview[i] ^ purview_key[i % 4];
		for (j = 0; j < 4; j++) {
			k = i * 4 + j;
			if (SMenuItem[k].iChildMenu == 99) {
				SMenuItem[k].iPower = 1;
				stop = 1;
			}
			if (flag & (1 << (3 -j))) {
				sum++;
				if (!stop){
					SMenuItem[k].iPower = 1;
				}
			} else
			if (!stop){
				SMenuItem[k].iPower = 0;
			}
		}
	}
	if (sum % 2)
		return(0);
	else
		return(-1);
}

int get_short_power(short_power, long_power)
    char *short_power;
    char *long_power;
{
    int i, sum = 0;

    memset(short_power, 0, ITEMS/4+1);
    for (i = 0; i < ITEMS; i++)
	if (long_power[i]) {
	    short_power[i / 4] |= (1 << (3 - (i % 4)));
	    sum++;
	}
    if (!(sum % 2)) {
	if (short_power[ITEMS/4-1] % 2) short_power[ITEMS/4-1]--;
	else short_power[ITEMS/4-1]++;
    }
    for (i = 0; i < ITEMS/4; i++)
	short_power[i] ^= purview_key[i % 4];
    return(0);
}

int get_long_power(short_power, long_power)
    char *short_power;
    char *long_power;
{
    int i, j, k, stop = 0;
    char flag;

    for (i = 0; i < ITEMS/4; i++) {
	flag = short_power[i] ^ purview_key[i % 4];
	for (j = 0; j < 4; j++) {
	    k = i * 4 + j;
	    if (k >= iMenuItemCount || SMenuItem[k].iChildMenu == 99)
			stop = 1;
	    if (stop)
			long_power[k] = 1;
	    else
		if (flag & (1 << (3 - j)))
			long_power[k] = 1;
		else
			long_power[k] = 0;
	}
    }
    return(0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -