📄 menu.c.old
字号:
#include <stdio.h>
#include <signal.h>
#include "menu.h"
#include "mytools.h"
#include "def_menu.h"
#include "color.h"
extern G_maxy, G_maxx, G_begy, G_begx;
extern char loper[3];
extern int sql_run(), misc_audit();
extern int G_start_menu_no;
void killed();
WINDOW *pHeaderWin;
WINDOW *pTailWin;
WINDOW *pMenuWin;
InitMenuDisp()
{
int i;
/* 菜单显示在标准窗口上 */
pMenuWin = stdscr;
pHeaderWin = stdscr;
pTailWin = stdscr;
DispFrame(pMenuWin);
}
DealMenu(iStartMenuNo, pMenuFp)
int iStartMenuNo;
FILE *pMenuFp;
{
int iRet, i, iMenu0, iMenu1 , iMenuItemQue, iLocateItem;
int iFMenuNo, iFLocateItem;
WINDOW *pWin;
char cFuncError = 0;
char sTmpBuf[128];
InitMenuDisp();
/*
* 菜单均显示在指定窗口区域内
*/
pWin = pMenuWin;
touchwin( pWin );
wrefresh( pWin );
GetWinParam( pWin );
for ( i = 0; i < iMenuCount; i++ ) {
iRet = 0;
while ( 1 ) {
iLocateItem = SMenu[i].iMenuItemSet[iRet];
if ( iLocateItem == -1 ) {
iRet = -1;
break;
}
if ( SMenuItem[iLocateItem].iPower ) break;
iRet++;
}
SMenuActiveStatus[i].iItem = iRet;
SMenu[i].iLocateY = SMenu[i].iLocateY - G_begy;
SMenu[i].iLocateX = SMenu[i].iLocateX - G_begx;
}
G_start_menu_no = iStartMenuNo;
iMenu0 = iStartMenuNo;
SMenuActiveStatus[iMenu0].iFatherMenu = -1;
iLocateItem = SMenuActiveStatus[iMenu0].iItem;
while (1) {
iRet = DispMenu( pWin, iMenu0, &iLocateItem, pMenuFp);
if ( iRet == ERR_MENU )
break;
if ( iRet == CLOSE ) {
i = 0;
while (1) {
iLocateItem = SMenu[iMenu0].iMenuItemSet[i];
if (iLocateItem == -1) {
i = -1;
break;
}
if (SMenuItem[iLocateItem].iPower) break;
i++;
}
SMenuActiveStatus[iMenu0].iItem = i;
iMenu0 = SMenuActiveStatus[iMenu0].iFatherMenu;
iLocateItem = SMenuActiveStatus[iMenu0].iItem ;
if (iMenu0 == 0)
continue;
/* 解决菜单重叠显示恢复问题 */
iFMenuNo = SMenuActiveStatus[iMenu0].iFatherMenu;
iFLocateItem = SMenuActiveStatus[iFMenuNo].iItem ;
RedrawMenu(pWin, iFMenuNo, &iFLocateItem, pMenuFp);
continue;
}
if ( iRet == OPEN_RIGHT ) {
SMenuActiveStatus[iMenu0].iItem = iLocateItem;
iMenu0 = SMenuActiveStatus[iMenu0].iFatherMenu;
iLocateItem = SMenuActiveStatus[iMenu0].iItem ;
while (1) {
iLocateItem++;
if (SMenu[iMenu0].iMenuItemSet[iLocateItem] == -1)
iLocateItem = 0;
i = SMenu[iMenu0].iMenuItemSet[iLocateItem];
if (SMenuItem[i].iPower) break;
}
DispMenuItem0( pWin, iMenu0, iLocateItem );
} else if ( iRet == OPEN_LEFT ) {
SMenuActiveStatus[iMenu0].iItem = iLocateItem;
iMenu0 = SMenuActiveStatus[iMenu0].iFatherMenu;
iLocateItem = SMenuActiveStatus[iMenu0].iItem ;
while (1) {
if (iLocateItem == 0)
while
(SMenu[iMenu0].iMenuItemSet[iLocateItem + 1] != -1)
iLocateItem++;
else
iLocateItem--;
i = SMenu[iMenu0].iMenuItemSet[iLocateItem];
if (SMenuItem[i].iPower) break;
}
DispMenuItem0( pWin, iMenu0, iLocateItem );
}
iMenuItemQue = SMenu[iMenu0].iMenuItemSet[iLocateItem];
cFuncError = 0;
/*
* 调用指针函数, 菜单项操作前的预处理
*/
if ( SMenuItem[iMenuItemQue].preprog) {
if (SMenuItem[iMenuItemQue].preprog(iMenuItemQue) < 0) {
cFuncError = 1;
}
}
if (cFuncError == 0) {
/*
* 激活菜单项操作
*/
if (SMenuItem[iMenuItemQue].cProcType == 'F') {
/*
* 调用系统预设函数
*/
if ( SMenuItem[iMenuItemQue].mproc) {
if (SMenuItem[iMenuItemQue].mproc(iMenuItemQue))
cFuncError = 1;
else
misc_audit( SMenuItem[iMenuItemQue].sName, NULL, 0, 0 );
}
} else if (SMenuItem[iMenuItemQue].cProcType == 'X') {
/*
* 执行shell程序
*/
if ( SMenuItem[iMenuItemQue].sShell[0] != '\0') {
if (ExecuteShell(iMenuItemQue, SMenuItem[iMenuItemQue].sShell, SMenuItem[iMenuItemQue].sParam ) )
cFuncError = 1;
else{
/*
memset( sTmpBuf, 0, 128 );
sprintf(sTmpBuf, "%s %s", SMenuItem[iMenuItemQue].sShell, SMenuItem[iMenuItemQue].sParam );
*/
misc_audit( SMenuItem[iMenuItemQue].sName, NULL, 0, 0 );
}
}
} else {
/*
* 调用系统预设函数, cProcType == 'M' "disp_table_screen"
*/
if ( SMenuItem[iMenuItemQue].mproc) {
if (SMenuItem[iMenuItemQue].mproc(iMenuItemQue) < 0)
cFuncError = 1;
}
}
}
switch ( SMenuItem[iMenuItemQue].cProcType ) {
case 'E': /* 返回上级菜单 */
i = 0;
while (1) {
iLocateItem = SMenu[iMenu0].iMenuItemSet[i];
if (iLocateItem == -1) {
i = -1;
break;
}
if (SMenuItem[iLocateItem].iPower) break;
i++;
}
SMenuActiveStatus[iMenu0].iItem = i;
iMenu0 = SMenuActiveStatus[iMenu0].iFatherMenu;
iLocateItem = SMenuActiveStatus[iMenu0].iItem ;
touchwin(pWin);
wrefresh(pWin);
break;
case 'F': /* 无下级菜单 */
break;
case 'M': /* 下级菜单 */
if (cFuncError == 1)
break;
SMenuActiveStatus[iMenu0].iItem = iLocateItem;
iMenu1 = SMenuItem[iMenuItemQue].iChildMenu;
SMenuActiveStatus[iMenu1].iFatherMenu = iMenu0;
iLocateItem = SMenuActiveStatus[iMenu1].iItem;
iMenu0 = iMenu1; /* iMenu1 为新的菜单号 */
break;
default: /* */
break;
}
#ifdef zgx010413
/*
* 调用指针函数, 菜单项操作前的预处理
*/
if ( SMenuItem[iMenuItemQue].preprog)
if (SMenuItem[iMenuItemQue].preprog(iMenuItemQue) < 0) {
break;
}
/*
* 激活菜单项操作
*/
if (SMenuItem[iMenuItemQue].cProcType == 'F') {
/*
* 调用系统预设函数
*/
if ( SMenuItem[iMenuItemQue].mproc)
if( !SMenuItem[iMenuItemQue].mproc(iMenuItemQue) )
misc_audit( SMenuItem[iMenuItemQue.sName, NULL, 0, 0 );
} else if (SMenuItem[iMenuItemQue].cProcType == 'X') {
/*
* 执行shell程序
*/
if ( SMenuItem[iMenuItemQue].sShell[0] != '\0')
if ( !ExecuteShell(iMenuItemQue, SMenuItem[iMenuItemQue].sShell, SMenuItem[iMenuItemQue].sParam ) ){
/*
memset( sTmpBuf, 0, 128 );
sprintf( sTmpBuf, "%s %s 成功", SMenuItem[iMenuItemQue].sSehll, SMenuItem[iMenuItemQue].sParam );
*/
misc_audit( SMenuItem[iMenuItemQue].sName, NULL, 0, 0 );
}
} else {
/*
* 调用系统预设函数, cProcType == 'M' "disp_table_screen"
*/
if ( SMenuItem[iMenuItemQue].mproc)
SMenuItem[iMenuItemQue].mproc(iMenuItemQue);
}
#endif
if ( iMenuItemQue == 0 )
break; /* 选择项 0 退出 */
}
return cFuncError;
}
int ExecuteShell(iItem, pCmd, pParam )
int iItem;
char *pCmd;
char *pParam;
{
char sFileName[128];
char sCommandBuf[1024];
struct termio stdin_term;
struct termio stdout_term;
int iRet;
db_close();
ioctl(0, TCGETA, &stdin_term);
ioctl(1, TCGETA, &stdout_term);
system("clear;stty sane");
signal(SIGINT, SIG_DFL);
sprintf(sFileName, "/tmp/.shell.%d", getpid());
scr_dump(sFileName);
sprintf(sCommandBuf, "%s %s", pCmd, pParam );
iRet = system( sCommandBuf );
if ( iRet < 0 ){
errcall( ERROR, "execute [%s] fail !!!", sCommandBuf );
}
signal(SIGINT, SIG_IGN);
ioctl(0, TCSETAW, &stdin_term);
ioctl(1, TCSETAW, &stdout_term);
if (db_open() == -1) {
printf("Error Open Database!\n");
exit(-1);
}
scr_restore(sFileName);
unlink(sFileName);
touchwin(curscr);
wrefresh(curscr);
if ( iRet < 0 ) return( -1 );
return(0);
}
/*
* 在屏幕处理中执行一个系统Shell命令(与屏幕及数据库无关)
*/
int ExecuteCommand(pCmd)
char *pCmd;
{
#define SHELL_LOG "/tmp/shell.log"
char sFileName[128];
char sCommand[128];
FILE *fp;
sprintf(sFileName, "/tmp/.shell.%d", getpid());
if ((fp = fopen(sFileName, "w+")) == NULL)
return(-1);
fprintf(fp, "echo\n");
fprintf(fp, "echo \"Start %s at `date`\"\n", pCmd);
fprintf(fp, "%s\n", pCmd);
fprintf(fp, "echo \"End %s at `date`\"\n", pCmd);
fprintf(fp, "echo\n");
fclose(fp);
sprintf(sCommand, "sh %s > %s 2>&1", sFileName, SHELL_LOG);
if (system(sCommand)) {
unlink(sFileName);
return(-1);
}
unlink(sFileName);
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -