亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wmenu.c

?? 詳細介紹了一篇關于pci開發的接口芯片
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*  CXL - Copyright (c) 1987-1989 by Mike Smedley - All Rights Reserved  */
/*  WMENU.C  -  wmenubeg()  starts a menu definition
                wmenuitem() defines a menu item
                wmenuend()  ends a menu definition
                wmenuget()  processes the defined menu      */

#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "cxldef.h"
#include "cxlkey.h"
#include "cxlmou.h"
#include "cxlvid.h"
#include "cxlwin.h"

/* prototypes for local functions */
static int              calc_bar_width(struct _menu_t *wmenu,
                                       struct _item_t *witem);
static int              calc_center_item(struct _item_t *item);
static void             call_after(struct _item_t *citem);
static void             call_before(struct _item_t *citem);
static void             call_func(void (*func)(void));
static void             close_window(WINDOW w);
static void             disp_item(struct _item_t *witem,int bar);
static struct _item_t  *down_item(struct _item_t *curr);
static struct _item_t  *first_item(void);
static void             free_menu(struct _menu_t *wmenu);
static struct _item_t  *goto_item(struct _item_t *citem,int which);
static void             hide_mouse_cursor(void);
static struct _item_t  *last_item(void);
static struct _item_t  *left_item(struct _item_t *curr);
static struct _item_t  *mouse_on_item(struct _menu_t *menu,int mrow,int mcol);
static void             post_move(struct _item_t *citem);
static void             pre_exit(WINDOW w,int close);
static void             pre_move(struct _item_t *citem);
static int              read_mouse(struct _item_t *citem);
static struct _item_t  *right_item(struct _item_t *curr);
static void             show_mouse_cursor(void);
static struct _item_t  *up_item(struct _item_t *curr);

/*---------------------------------------------------------------------------*/

/* menu item movement definitions */
#define ITM_LT  0
#define ITM_RT  1
#define ITM_UP  2
#define ITM_DN  3
#define ITM_FR  4
#define ITM_LS  5

/*---------------------------------------------------------------------------*/

/* array of function pointers to some of the item movement functions */
static struct _item_t *(*funcs[4])(struct _item_t *) =
    { left_item,right_item,up_item,down_item };

/* flag used for initial display of menu selections */
static int _Near _Cdecl dispdesc=YES;

/*---------------------------------------------------------------------------*/

int wmenubeg(int srow,int scol,int erow,int ecol,int btype,int battr,
             int wattr,void (*open)(void))
{
    struct _menu_t *wmenu;

    /* if this is a submenu, then make sure that it is under a menu item */
    if(_winfo.mlevel>_winfo.ilevel) return(_winfo.errno=W_NOITMDEF);

    /* allocate memory for new menu record */
    if((wmenu=malloc(sizeof(struct _menu_t)))==NULL)
        return(_winfo.errno=W_ALLOCERR);

    /* if menu is not a submenu, make it a new base menu record */
    if(!_winfo.mlevel) {
        if(_winfo.menu!=NULL) _winfo.menu->next=wmenu;
        wmenu->prev=_winfo.menu;
        wmenu->next=NULL;
        wmenu->parent=NULL;
        _winfo.menu=_winfo.cmenu=wmenu;
    }
    else {
        wmenu->parent=_winfo.cmenu;
        _winfo.cmenu=_winfo.cmenu->item->child=wmenu;
    }

    /* save info in menu record */
    wmenu->srow=srow;
    wmenu->scol=scol;
    wmenu->erow=erow;
    wmenu->ecol=ecol;
    wmenu->btype=btype;
    wmenu->battr=mapattr(battr);
    wmenu->wattr=mapattr(wattr);
    wmenu->open=open;
    wmenu->usecurr=NO;
    wmenu->item=NULL;

    /* increment menu level */
    _winfo.mlevel++;

    /* return normally */
    return(_winfo.errno=W_NOERROR);
}

/*---------------------------------------------------------------------------*/

int wmenuitem(int wrow,int wcol,char *str,int schar,int tagid,int fmask,
              void (*select)(void),unsigned hotkey,int help)
{
    struct _item_t *witem;

    /* make sure that wmenubeg() or wmenubegc() has been called */
    if(!_winfo.mlevel) return(_winfo.errno=W_NOMNUBEG);

    /* allocate memory for new item record */
    if((witem=malloc(sizeof(struct _item_t)))==NULL)
        return(_winfo.errno=W_ALLOCERR);

    /* add new menu item record to linked list */
    if(_winfo.cmenu->item!=NULL) _winfo.cmenu->item->next=witem;
    witem->prev=_winfo.cmenu->item;
    witem->next=NULL;
    _winfo.cmenu->item=witem;

    /* save info in item record */
    witem->wrow   = wrow;
    witem->wcol   = wcol;
    witem->str    = str;
    witem->schar  = schar;
    witem->tagid  = tagid;
    witem->fmask  = fmask;
    witem->select = select;
    witem->hotkey = hotkey;
    witem->desc   = NULL;
    witem->dwrow  = 0;
    witem->dwcol  = 0;
    witem->dattr  = 0;
    witem->redisp = NO;
    witem->help   = help;
    witem->child  = NULL;
    witem->before =
    witem->after  = NULL;

    /* set item level == menu level */
    _winfo.ilevel=_winfo.mlevel;

    /* return normally */
    return(_winfo.errno=W_NOERROR);
}

/*---------------------------------------------------------------------------*/

int wmenuend(int taginit,int menutype,int barwidth,int textpos,
             int textattr,int scharattr,int noselattr,int barattr)
{
    struct _item_t *item;
    int w_width,border,found;

    /* make sure at least 1 menu item has been defined */
    if(!_winfo.mlevel||_winfo.mlevel>_winfo.ilevel)
        return(_winfo.errno=W_NOITMDEF);

    /* make sure that the specified initial tagid matches the */
    /* tagid of one of the defined menu items in this menu    */
    for(found=NO,item=_winfo.cmenu->item;item!=NULL;item=item->prev) {
        if(item->tagid==taginit) {
            found=YES;
            break;
        }
    }
    if(!found) return(_winfo.errno=W_INVTAGID);

    /* if bar width > window width, then bar width = window width */
    border=(_winfo.cmenu->btype==5)?0:1;
    w_width=(_winfo.cmenu->ecol-border)-(_winfo.cmenu->scol+border)+1;
    if(barwidth>w_width) barwidth=w_width;

    /* add rest of menu information to menu record */
    _winfo.cmenu->citem     = NULL;
    _winfo.cmenu->tagcurr   = taginit;
    _winfo.cmenu->menutype  = menutype;
    _winfo.cmenu->barwidth  = barwidth;
    _winfo.cmenu->textpos   = barwidth?textpos:0;
    _winfo.cmenu->textattr  = mapattr(textattr);
    _winfo.cmenu->scharattr = mapattr(scharattr);
    _winfo.cmenu->noselattr = mapattr(noselattr);
    _winfo.cmenu->barattr   = _vinfo.mapattr?revsattr(_winfo.cmenu->textattr):
                              barattr;

    /* set current menu pointer to parent menu */
    if((_winfo.cmenu=_winfo.cmenu->parent)==NULL) _winfo.cmenu=_winfo.menu;

    /* decrement menu and item levels */
    _winfo.mlevel--;
    _winfo.ilevel--;

    /* return with no error */
    return(_winfo.errno=W_NOERROR);
}


/*---------------------------------------------------------------------------*/

int wmenuget(void)
{
    register unsigned int xch;
    register struct _item_t *citem;
    struct _item_t *item;
    int valid,pulldown=NO,menuerr,winerr,err;
    char ch;
    WINDOW w;

    /* make sure we have a defined menu */
    if(_winfo.cmenu==NULL) {
        _winfo.errno=W_NOMNUDEF;
        return(-1);
    }

    /* make sure that wmenuend() was called */
    if(_winfo.mlevel||_winfo.ilevel) {
        _winfo.errno=W_NOMNUEND;
        return(-1);
    }

    /* open menu's window (unless menu is to use current window) */
    if(!_winfo.cmenu->usecurr) {
        w=whandle();
        hide_mouse_cursor();
        if(!wopen(_winfo.cmenu->srow,_winfo.cmenu->scol,_winfo.cmenu->erow
          ,_winfo.cmenu->ecol,_winfo.cmenu->btype,_winfo.cmenu->battr
          ,_winfo.cmenu->wattr)) return(-1);
        show_mouse_cursor();

        /* save environment info, call menu open   */
        /* function, then restore environment info */
        if(_winfo.cmenu->open!=NULL) call_func(_winfo.cmenu->open);
    }

    /* if mouse cursor mode is on, show cursor */
    show_mouse_cursor();

    /* find first item in linked list */
    if((item=_winfo.cmenu->item)!=NULL) for(;item->prev!=NULL;item=item->prev);

    /* display all menu items */
    dispdesc=NO;
    valid=NO;
    while(item!=NULL) {
        disp_item(item,0);
        if(!(item->fmask&M_NOSEL)) valid=YES;
        item=item->next;
    }
    dispdesc=YES;

    /* make sure there is at least 1 selectable menu item */
    if(!valid) {
        pre_exit(w,YES);
        _winfo.errno=W_NOSELECT;
        return(-1);
    }

    /* search linked list of item records for the item matching    */
    /* the last item.  If there was no last item, search for       */
    /* the initial tag ID position.  If no initial tag ID position */
    /* was specified, then find the upper-leftmost menu item.      */
    citem=NULL;
    if(_winfo.cmenu->menutype&M_SAVE) {
        for(citem=_winfo.cmenu->item;citem!=NULL;citem=citem->prev) {
            if((_winfo.cmenu->citem==citem)&&
               (!(citem->fmask&M_NOSEL)))
                break;
        }
    }
    if(citem==NULL) {
        citem=wmenuifind(_winfo.cmenu->tagcurr);
        if((citem==NULL)||(citem->fmask&M_NOSEL)) citem=first_item();
    }

    /* call the current menu item's 'before'  */
    /* function and display current menu item */
    post_move(citem);

    /* main process of function */

    for(;;) {

        /* update current menu item and help category */
        _winfo.cmenu->citem=citem;
        _winfo.help=citem->help;

        /* read mouse/keyboard for keypress, then test the keypress */
        _kbinfo.inmenu=TRUE;
        xch=read_mouse(citem);
        citem=_winfo.cmenu->citem;
        if(!xch) xch=getxch();
        _kbinfo.inmenu=FALSE;
        switch(xch) {

            case 0x011b:    /* Esc */

                /* if Esc checking is on, erase selection bar, */
                /* free menu records and return to caller      */
                if(_winfo.esc||(_winfo.cmenu!=_winfo.menu)) {
                    pre_move(citem);
                    pre_exit(w,YES);
                    _winfo.errno=W_ESCPRESS;
                    return(-1);
                }
                break;

            case 0x4700:    /* Home */

                /* hide selection bar and find upper-leftmost menu item */
                citem=goto_item(citem,ITM_FR);
                break;

            case 0x4b00:    /* LeftArrow */

                /* if current menu is a pull-down menu,         */
                /* then erase selection bar, free menu records, */
                /* and return special code to caller            */
                if(_winfo.cmenu->menutype&M_PD) {
                    pre_move(citem);
                    pre_exit(w,YES);
                    _winfo.errno=W_NOERROR;
                    return(M_PREVPD);
                }

                /* if current menu is a horizontal menu, then hide */
                /* selection bar and find menu item to the left    */
                if(_winfo.cmenu->menutype&M_HORZ)
                    citem=goto_item(citem,ITM_LT);

                /* if pull-down menu flag is set, select this item */
                if(pulldown&&citem->child!=NULL) goto enter;
                break;

            case 0x4800:    /* UpArrow */

                /* if current menu is a vertical menu, then hide */
                /* selection bar and find menu item upwards      */
                if(_winfo.cmenu->menutype&(M_VERT|M_PD))
                    citem=goto_item(citem,ITM_UP);
                break;

            case 0x4d00:    /* RightArrow */

                /* if current menu is a pull-down menu,         */
                /* then erase selection bar, free menu records, */
                /* and return special code to caller            */
                if(_winfo.cmenu->menutype&M_PD) {
                    pre_move(citem);
                    pre_exit(w,YES);
                    _winfo.errno=W_NOERROR;
                    return(M_NEXTPD);
                }

                /* if current menu is a horizontal menu, then hide */
                /* selection bar and find menu item to the right   */
                if(_winfo.cmenu->menutype&M_HORZ)
                    citem=goto_item(citem,ITM_RT);

                /* if pulldown flag is set, then select this item */
                if(pulldown&&citem->child!=NULL) goto enter;
                break;

            case 0x5000:    /* DownArrow */

                /* if current item has a pull-down menu, select it */
                if(citem->fmask&M_HASPD) goto enter;

                /* if current menu is a vertical menu, then hide */
                /* selection bar and find menu item downwards    */
                if(_winfo.cmenu->menutype&(M_VERT|M_PD))
                    citem=goto_item(citem,ITM_DN);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品18久久久久久久久久久久| 在线中文字幕不卡| 亚洲动漫第一页| 久久亚洲精品小早川怜子| 色综合久久久久综合体桃花网| 麻豆一区二区在线| 1024成人网| 国产亚洲精品中文字幕| 91精品婷婷国产综合久久竹菊| 高潮精品一区videoshd| 久久超级碰视频| 亚洲一区二区欧美日韩| 国产喷白浆一区二区三区| 日韩午夜激情av| 色婷婷亚洲一区二区三区| 久久99久久99| 日韩国产欧美在线视频| 亚洲制服欧美中文字幕中文字幕| 国产精品―色哟哟| 久久看人人爽人人| 久久不见久久见中文字幕免费| 午夜精品免费在线观看| 亚洲欧洲日产国产综合网| 精品国产一区久久| 日韩免费高清视频| 日韩免费观看高清完整版| 欧美一区二区精美| 欧美一区二区三区在| 国产精品传媒视频| 99久久综合色| 国产精品白丝jk白祙喷水网站 | 视频一区欧美日韩| 五月激情丁香一区二区三区| 午夜伦欧美伦电影理论片| 日韩中文字幕91| 热久久免费视频| 国产精品一区二区久久精品爱涩| 国产91丝袜在线观看| av在线不卡免费看| 欧美在线制服丝袜| 欧美一区二区三区在线看| 日韩一区二区视频在线观看| 精品对白一区国产伦| 国产婷婷精品av在线| 亚洲黄一区二区三区| 亚洲1区2区3区4区| 久久99热这里只有精品| 成人97人人超碰人人99| 欧美日韩另类一区| 欧美成人欧美edvon| 亚洲欧美在线视频| 老司机精品视频线观看86| 国产精品亚洲成人| 国产成人精品午夜视频免费| 国产麻豆成人传媒免费观看| 波多野结衣中文字幕一区二区三区| 91社区在线播放| 91精品国产品国语在线不卡| 日本一区二区综合亚洲| 亚洲国产美女搞黄色| 经典三级视频一区| 在线影院国内精品| 国产日产欧美一区二区三区| 亚洲精品亚洲人成人网在线播放| 丝袜亚洲另类欧美综合| 91在线视频网址| 26uuu欧美日本| 亚洲bt欧美bt精品777| 99久久伊人网影院| 亚洲精品一区二区三区影院| 亚洲人123区| 99久久伊人久久99| 久久精品这里都是精品| 日韩主播视频在线| 色婷婷综合视频在线观看| 欧美国产国产综合| 日韩影院在线观看| 欧美偷拍一区二区| 亚洲欧美成aⅴ人在线观看| 成人a免费在线看| 精品国产91洋老外米糕| 麻豆久久久久久| 91精品婷婷国产综合久久性色| 亚洲18女电影在线观看| 91国内精品野花午夜精品| 国产精品欧美一区二区三区| 国产成人综合亚洲网站| 精品999在线播放| 精品一区二区免费| 日韩欧美三级在线| 麻豆91免费观看| 久久午夜色播影院免费高清| 国内久久精品视频| 日韩精品一区二区三区在线播放| 午夜视频在线观看一区二区| 欧美日韩视频一区二区| 日韩高清不卡一区二区| 日韩欧美一级二级| 久久99蜜桃精品| 中文字幕欧美激情一区| 成人99免费视频| 亚洲视频在线观看三级| 色综合久久久久网| 亚洲国产va精品久久久不卡综合| 欧美日韩国产一级片| 久久激情五月激情| 久久久久久久久岛国免费| 99久久久国产精品| 一个色妞综合视频在线观看| 欧美一级片免费看| 成人亚洲精品久久久久软件| 一区二区在线看| 欧美日精品一区视频| 精品在线一区二区三区| 国产精品久久久久影院亚瑟| 欧美视频在线播放| 国产一区999| 亚洲激情男女视频| 欧美精品一区二区三区视频| 成人免费看黄yyy456| 性做久久久久久| 国产精品麻豆久久久| 欧美美女直播网站| 丁香桃色午夜亚洲一区二区三区| 亚洲一区欧美一区| 中文字幕乱码亚洲精品一区 | 欧美日精品一区视频| 国产麻豆一精品一av一免费| 一级女性全黄久久生活片免费| 国产偷v国产偷v亚洲高清| 5566中文字幕一区二区电影| 国产精品性做久久久久久| 一区二区三区中文字幕电影| 欧美v亚洲v综合ⅴ国产v| 欧美性猛交xxxxxx富婆| 粉嫩欧美一区二区三区高清影视 | 91久久精品网| 国产成人久久精品77777最新版本| 日韩国产欧美在线播放| 国产精品女同互慰在线看| 日韩欧美国产麻豆| 欧美视频精品在线观看| 色婷婷亚洲综合| 国产精品 欧美精品| 日本91福利区| 亚洲成人av一区| 亚洲欧洲国产专区| 中文字幕一区二区三区视频| 91.xcao| 欧美日韩中文字幕精品| 日本伦理一区二区| 在线免费观看日本欧美| 欧美性大战久久久久久久蜜臀| 97精品久久久午夜一区二区三区 | 五月天欧美精品| 亚洲成av人片| 午夜成人免费电影| 亚洲欧美一区二区三区国产精品| 欧美激情在线观看视频免费| 久久精品网站免费观看| 久久久亚洲午夜电影| 国产日韩欧美麻豆| 亚洲国产成人一区二区三区| 国产精品区一区二区三区| 中文字幕电影一区| 亚洲不卡av一区二区三区| 久久99精品久久久久久久久久久久| 国产一区激情在线| 色网站国产精品| 91精品国产麻豆| 国产精品成人免费精品自在线观看| 亚洲专区一二三| 极品美女销魂一区二区三区| 色综合天天综合网国产成人综合天| 欧美精品三级在线观看| 国产情人综合久久777777| 亚洲高清视频在线| 懂色av一区二区三区蜜臀| 欧美高清视频在线高清观看mv色露露十八| 日韩一区二区三区电影| 一区免费观看视频| 久草热8精品视频在线观看| 色婷婷久久99综合精品jk白丝| 精品日韩成人av| 亚洲成人av一区二区| av资源站一区| 久久亚洲精华国产精华液| 无吗不卡中文字幕| 色婷婷综合久色| 中文字幕av一区二区三区免费看 | 欧美国产1区2区| 久久99精品国产.久久久久久| 欧美综合一区二区| 中文字幕一区在线观看视频| 国产尤物一区二区在线| 欧美精品黑人性xxxx| 亚洲午夜久久久久久久久久久| 国产aⅴ综合色| 久久免费美女视频| 久久97超碰国产精品超碰|