AIX仿真SCO UNIX的MENU驱动(2)
来源:互联网 发布:网络前景 编辑:程序博客网 时间:2024/06/06 04:22
(续)AIX仿真SCO UNIX的MENU驱动
王光红
static void start_line(MENU *m)
{
if(m->curitem->index < m->toprow + m->height * m->cols
&& m->curitem->index >m->toprow) return;
if(m->nitems>=m->height+m->curitem->index){
if(m->toprow >=m->curitem->index)
m->toprow=m->curitem->index;
else
m->toprow +=m->cols;
}
else{
m->toprow=m->nitems - m->height;
}
}
static int compute_seat(MENU *m)
{
int n, y, x, t;
for(n=0; n < m->nitems; n++){
t=n-1;
if(t<0) m->items[n]->left=m->items[m->nitems-1];
else m->items[n]->left=m->items[t];
t=n+1;
if(t>=m->nitems) m->items[n]->right=m->items[0];
else m->items[n]->right=m->items[t];
t=n - m->cols;
if(t<0) m->items[n]->up=m->items[m->nitems-1];
else m->items[n]->up=m->items[t];
t=n + m->cols;
if(t>=m->nitems) m->items[n]->down=m->items[0];
else m->items[n]->down=m->items[t];
}
}
int post_menu(MENU *m)
{
touch_menu(m);
wrefresh(m->sub);
}
int touch_menu(MENU *m)
{
int y, x, s, cy, cx;
char *lable;
chtype attrs;
if(m==NULL) return -1;
if(m->sub==NULL) return -2;
unpost_menu(m);
start_line(m);
for(s=m->toprow, y=0;y<m->height;y++)
for(x=0;x<m->cols;x++){
lable=menu_lable(s, m);
if(s==m->curitem->index){
attrs=m->sub->_attrs;
wattrset(m->sub, A_REVERSE|m->sub->_attrs);
mvwprintw(m->sub, y, x*(m->itemlen), "%s%s", m->mark, lable);
cy=y, cx=x*(m->itemlen);
wattrset(m->sub, attrs);
}
else
mvwprintw(m->sub, y, x*(m->itemlen)+m->marklen, lable);
s++;
}
wmove(m->sub, cy, cx);
wmove(m->win, cy+1, cx+1);
compute_seat(m);
}
int unpost_menu(MENU *m)
{
werase(m->sub);
wrefresh(m->win);
}
ITEM **menu_items(MENU *m)
{
return m->items;
}
ITEM *current_item(MENU *m)
{
return m->curitem;
}
int item_index(ITEM *i)
{
return i->index;
}
int free_item(ITEM *i)
{
free(i);
return 0;
}
int free_menu(MENU *m)
{
free(m);
return 0;
}
int menu_driver(MENU *m, int c)
{
switch(c){
case REQ_LEFT_ITEM:
if(m->curitem->left){
m->curitem=m->curitem->left;
touch_menu(m);
}
break;
case REQ_RIGHT_ITEM:
if(m->curitem->right){
m->curitem=m->curitem->right;
touch_menu(m);
}
break;
case REQ_UP_ITEM:
if(m->curitem->up){
m->curitem=m->curitem->up;
touch_menu(m);
}
break;
case REQ_DOWN_ITEM:
if(m->curitem->down){
m->curitem=m->curitem->down;
touch_menu(m);
}
break;
case REQ_SCR_ULINE:
case REQ_SCR_DLINE:
case REQ_SCR_DPAGE:
case REQ_SCR_UPAGE:
case REQ_FIRST_ITEM:
m->curitem=m->items[0];
touch_menu(m);
break;
case REQ_LAST_ITEM:
break;
case REQ_NEXT_ITEM:
if(m->curitem->index<m->nitems)
m->curitem=m->items[m->curitem->index + 1];
else
m->curitem=m->items[0];
touch_menu(m);
break;
case REQ_PREV_ITEM:
if(m->curitem->index>0)
m->curitem=m->items[m->curitem->index - 1];
else
m->curitem=m->items[m->nitems-1];
touch_menu(m);
break;
case REQ_TOGGLE_ITEM:
case REQ_CLEAR_PATTERN:
case REQ_BACK_PATTERN:
case REQ_NEXT_MATCH:
case REQ_PREV_MATCH:
break;
}
wrefresh(m->sub);
return E_OK;
}
- AIX仿真SCO UNIX的MENU驱动(2)
- AIX仿真SCO UNIX的MENU驱动(1)
- SCO -> AIX 终端仿真的问题
- Linux、AIX UNIX、SCO UNIX下查看硬件配置
- 华为的sco unix培训教材
- SCO Unix关于预处理宏的介绍
- SCO-UNIX在VMWARE下的安装
- SCO UNIX 讲座
- SCO UNIX 目录管理
- sco unix 管理员速成
- SCO UNIX 进程管理
- SCO UNIX VI使用
- sco unix基础教材
- sco unix user passwd
- SCO UNIX快速入门
- SCO UNIX快速入门
- SCO UNIX 5.06安装
- Sco Unix 507
- JSP语法格式
- UNIX系统下informix自制开发工具构思介绍
- 动态SQL中DESCRIPTOR的应用
- 完善Borland C++ Builder可视化控件功能三例
- AIX仿真SCO UNIX的MENU驱动(1)
- AIX仿真SCO UNIX的MENU驱动(2)
- (转)NGN发展应用的展望:下一代网络
- ASP中巧用Split()函数生成SQL查询语句
- 计算合同内各级别的价格函数 -- 精华推荐
- ASP生成Word文档的又一方法
- ASP.Net安装简明手册
- 在Red Hat Linux 9+Apache2.0.48+php4.3.4+ZendOptimizer2.1.0b MySQL5.0.0-0+Tomcat5.0.16+ j2sdk1.4.2.03整合
- 用c#創建用於asp.net的smtp郵件服務
- 介绍一个免费的具备数据显示/录入/更新/删除功能的asp.net控件