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

📄 active.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
📖 第 1 页 / 共 2 页
字号:


			di[num++] = i;
		}
	}

	if (num == 0) {
		h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, "无活动进程!", 1, 0);
		delwin(my_win);
		scr_restore(filename);
		unlink(filename);
		return(0);
	}

	pos = 0;
	while (1) {
		line = MY_LINES;
		for (i = line; i < 17; i++) clear_wline(my_win, i);
		for (i = 0; ((pos + i) < num) && (i < 14); i++) {
			sprintf(buf, "%x %-15.15s\t\t%s", i, head[pos+i].exec_name, head[pos + i].program_name);
			h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);	
		}
	
		line = (pos + i) < num;
		sprintf(buf, "以上为活动进程, 请选择其一暂停%s%s%s%s",
			(pos || line) ? " (" : "", pos ? " PgUp 上页" : "",
			line ? " PgDn 下页" : "", (pos || line) ? " )" : "");
		h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, buf, 0, 0);

		wrefresh(my_win);

		do {
			switch (line = getkey(my_win)) {
			    case PGUP:
				if (pos) {
					pos -= 14;
					line = 0;
				}
				break;
			    case PGDN:
				if ((pos + i) < num) {
					pos += 14;
					line = 0;
				}
				break;
			    case CTRL_L:
				wrefresh(curscr);
				break;
			    case ESCAPE:
				delwin(my_win);
				scr_restore(filename);
				unlink(filename);
				return(0);
			    default:
				if (0x30 <= line && line <= 0x39)
					line -= 0x30;
				else
				if ('a' <= line && line <= 'f')
					line += 10 - 'a';
				else
				if ('A' <= line && line <= 'F')
					line += 10 - 'A';
				else {
					line = 1;
					break;
				}

				if (line >= i) break;
				line += pos;
				if (di[line] == -1) break;

				sprintf(buf, "暂停 %s(%s) ...", head[line].program_name, head[line].exec_name);
				clear_wline(my_win, MY_LINES+PAGE);
				h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, buf,
					    0, 0);

				sleep(2);

				pos = di[line];
				
#ifdef zgx010528_modi
				sprintf(ppp.prog_name, "%s%%",
					sh1->pst[pos].name);
				$select * into :ppp from sys_module
				where prog_name like :ppp.prog_name;

#else
				sprintf(ppp.prog_name, "%s",
					sh1->pst[pos].name);
				$select * into :ppp from sys_module
				where prog_name = :ppp.prog_name;

#endif

				if (SQLCODE) {
					errcall(ERROR,
					"Select program_mode error![%s][%d]",
					sh1->pst[pos].name, SQLCODE);
					clear_wline(my_win, MY_LINES+PAGE);
					sprintf(buf, "%s(%s) 暂停失败! 任意键继续...",
						head[line].program_name, head[line].exec_name);
					h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS,
						    buf, 1, 0);
#ifdef zgx010520_modi
					delwin(my_win);
					scr_restore(filename);
					unlink(filename);
					return(0);
#else
					goto loop;
#endif
				}

				if (ppp.start_mode[0] != '4') {

					kill(sh1->pst[pos].pid, SIGUSR1);
					sh1->pst[pos].pause = KILLED;
				} else
					sh1->pst[pos].pause = PAUSE;

				clear_wline(my_win, MY_LINES+PAGE);
				sprintf(buf, "%s(%s) 暂停成功! 任意键继续...", head[line].program_name, head[line].exec_name);
				h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, buf,
					    1, 0);
#ifdef zgx010520_modi	/* 多次选择 */
				delwin(my_win);
				scr_restore(filename);
				unlink(filename);
				return(0);
#else
				goto loop;
#endif
			}
		} while (line);
	}
}

/*
 * 查询系统所运行的模块状态
 */
sysstate()
{
	char filename[128], buf[80], tail[30];
	WINDOW *my_win;
	PSTAT pp;
	int flag;

	sprintf(filename, "/tmp/.sysstate.%d", getpid());
	scr_dump(filename);

	disp_below("系统状态");
	clear_wline(stdscr, LINES-1);
	h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
	h_prompt(LINES-1, 1, "系统状态", 0, 0);
	my_win = newwin(18, 80, 3, 0);
	mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
	wrefresh(my_win);

	if (no_init()) {
		h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, "系统未启动!", 1, 0);
		delwin(my_win);
		scr_restore(filename);
		unlink(filename);
		return(0);
	}

	$declare cur_5 cursor for
	select * from sys_module
	where start_mode not in ('0','3')
	order by module_id;

	if (SQLCODE) { 
		errcall(ERROR, "Declare cursor error!(cur_5:%d)", SQLCODE);
		h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, "Declare cursor error!",
			    1, 0);
		delwin(my_win);
		scr_restore(filename);
		unlink(filename);
		return(-1);
	}

	sprintf(buf, "模块描述            程序名      最后执行时间  执行次数  状态  进程号");
	CreateList(20, 74, 4, 3, buf);

	$open cur_5;
	if (SQLCODE) { 
		errcall(ERROR, "Open cursor error!(cur_5:%d)", SQLCODE);
		FreeList();
		h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS, "Open cursor error!",
			    1, 0);
		delwin(my_win);
		scr_restore(filename);
		unlink(filename);
		return(-1);
	}

	while (1) {
		$fetch cur_5 into :ppp;
		if (SQLCODE == 100) break;
		if (SQLCODE < 0) {
			errcall(ERROR, "Fetch cursor error!(cur_5:%d)", SQLCODE);
			$close cur_5;
			FreeList();
			h_winprompt(my_win, MY_LINES+PAGE, MY_ROWS,
				    "Fetch cursor error!", 1, 0);
			delwin(my_win);
			scr_restore(filename);
			unlink(filename);
			return(-1);
		}

		del_st_space("sys_module", &ppp);
		strcpy(pp.name, ppp.prog_name);
		if (sel_shm_pid(&pp) < 0) {
			if (ppp.start_mode[0] != '1') {
				sprintf(buf, "%-20.20s%-12.12s%22s  %-6s%6s",
					ppp.prog_desc, ppp.prog_name,
					" ", "异常", " ");


				AddListItem(buf, 1);
			}
			continue;
		}

		flag = 0;

		switch (pp.pause) {
			case PAUSE:
				strcpy(tail, "暂停"); 
				break;
			case ACTIVE:
			case SETTIME:
				if (get_pid(pp.name, &pp.pid) < 0) {
					upd_shm_pid(pp.name, pp.pid, 'O');
					strcpy(tail, "异常");
					flag = 1;
					break;
				}
 				strcpy(tail, "活动");
				break;
			case KILLED:
				strcpy(tail, "关闭");
				break;
			default:
				strcpy(tail, "异常");
				flag = 1;
				break;
		}

		sprintf(buf, "%-20.20s%-12.12s%-14s%8d  %-6s%6d",
			ppp.prog_desc, ppp.prog_name, pp.time,
			pp.times, tail, pp.pid);  
  
		AddListItem(buf, flag);
	}

	$close cur_5;

#if 0
	sprintf(buf, "%s", "调试开关");
	if (debug_ok())
		strcat(buf, "  活动");
	else
		strcat(buf, "  关闭");
	line++;
	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
#endif

	clear_wline(stdscr, LINES-1);
	h_wpromptr(stdscr, LINES-1, "上移: Home PgUp ↑ 下移: End PgDn ↓ 返回: ESC", 0, 0);
	DispList(0);
	FreeList();

	h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
	h_prompt(LINES-1, 1, "系统状态", 0, 0);

#ifndef zgx010427
	disp_msg_state(my_win);
#endif

	delwin(my_win);
	scr_restore(filename);
	unlink(filename);
	return(0);
}

disp_msg_state(WINDOW *my_win)
{
struct	msg_s_stat m_s_s;
char	buf[80], str[80], ch;
int	line;

	line = MY_LINES;

	mvwprintw(my_win, 0, 0, "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
	sprintf(buf, "%s %s %s %s %s %s %s", "系统消息名", "消息个数",
		"发送进程", "发送时间", "接收进程", "接收时间", "创建时间");
	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
	h_winprompt(my_win, line++, MY_ROWS, "----------------------------------------------------------------", 0, 0);

	disp_msg_stat(MONITOR, str);
	sprintf(buf, "%-10s %s", "MONITOR", str);
	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);

	h_winprompt(my_win, line++, MY_ROWS, "----------------------------------------------------------------", 0, 0);
	line++;

	sprintf(buf, "%s  %s  %s", "用户消息名", "消息个数", "等待接收进程数");

	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
	h_winprompt(my_win, line++, MY_ROWS, "------------------------------------", 0, 0);

	disp_msg_nonb_stat(REQ_MSG, str);
	sprintf(buf, "%-10s  %s", "REQ_MSG", str);
	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);

	disp_msg_nonb_stat(RESP_MSG, str);
	sprintf(buf, "%-10s  %s", "RESP_MSG", str);
	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);

#ifdef zgx010717_added
#else
	disp_msg_nonb_stat(TO_SAFE, str);
	sprintf(buf, "%-10s  %s", "TO_SAFE", str);
	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);

	disp_msg_nonb_stat(FROM_SAFE, str);
	sprintf(buf, "%-10s  %s", "FROM_SAFE", str);
	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);

#endif
	h_winprompt(my_win, line++, MY_ROWS, "------------------------------------", 0, 0);
	line++;

	sprintf(buf, "%s  %s  %s", "空闲注册项数", "空闲消息描述符数",
		"空闲消息内存(字节)");
	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);
	h_winprompt(my_win, line++, MY_ROWS, "--------------------------------------------------", 0, 0);

	buf[0] = 0;
	if (message_system_stat(&m_s_s) >= 0)
		sprintf(buf, "%12d  %16d  %18d", m_s_s.free_msg_r_log,
			m_s_s.free_msg_log, m_s_s.free_mem_byte);
	h_winprompt(my_win, line++, MY_ROWS, buf, 0, 0);

	h_winprompt(my_win, line++, MY_ROWS, "--------------------------------------------------", 1, 0);
}

disp_msg_nonb_stat(type, str)
int	type;
char	*str;
{ 
struct	msg_q_stat m_q_s;
int	msgid;

	str[0] = 0;
	
	msgid = gmsg_nonb(type);
	
	if (msgid < 0) {
		errcall(ERROR, "Unable get msg_nonb!");
		return(-1);
	}

	if (message_queue_stat(msgid, &m_q_s) < 0) {
		errcall(ERROR, "Call message_queue_stat error!");
		return(-1);
	}
	sprintf(str, "%8d  %14d", m_q_s.msg_log_cnt, m_q_s.msg_w_log_cnt);
}

disp_msg_stat(type, str)
int	type;
char	*str;
{
struct	msqid_ds buf;
struct	tm *tm;
char	tm1[9], tm2[9], tm3[9];

	str[0] = 0;

	if (gmsgs(type, &buf) < 0) {
		errcall(ERROR, "Call gmsgs error!");
		return(-1);
	}

	tm = localtime(&buf.msg_stime);
	sprintf(tm1, "%-8.8s", asctime(tm) + 11);

	tm = localtime(&buf.msg_rtime);
	sprintf(tm2, "%-8.8s", asctime(tm) + 11);

	tm = localtime(&buf.msg_ctime);
	sprintf(tm3, "%-8.8s", asctime(tm) + 11);

	sprintf(str, "%8d %8d %s %8d %s %s",
		buf.msg_qnum, buf.msg_lspid, tm1, buf.msg_lrpid, tm2, tm3);
}

⌨️ 快捷键说明

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