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

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

?? udldcfg.c

?? 工業組態軟件modbus驅動源代碼, 包括幫助文件.共享.
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* $Header: "%n Ver=%v  %f  LastEdit=%w  Locker=%l" */
/* "UDLDCFG.C Ver=3  20-Nov-97,17:41:02  LastEdit=JIMV  Locker=***_NOBODY_***" */
/***********************************************************************\
*                                                                       *
*       Copyright Wonderware Software Development Corp. 1992-1997       *
*                                                                       *
*               ThisFileName="L:\ww\dde_serv\src\udsample\udldcfg.c"    *
*               LastEditDate="1997 Nov 20  17:41:00"                    *
*                                                                       *
\***********************************************************************/

/*
 * Functions that build and manipulate data structures required by the
 * driver.
 */

#define LINT_ARGS
#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <io.h>
#include <stdlib.h>

#include "ntconv.h"
#include "hmemcpy.h"
#include "udprot.h"
#include "uddefs.h"
#include "protocol.h"
#include "debug.h"
#include "wwassert.h"
#include "udgetstr.h"
#include "wwcomdlg.h"
#include "ntsrvr.h"
#include "strval.h"
#include "Utitech.h"
#include "CheckItem.h"

USES_ASSERT

#define MAX_MSG_SIZE    100
#define MAX_PTS          22
#define FOLDMIN           2

extern CHAIN    PortList;
extern HWND     hWndParent;
extern BOOL     bBldSendMsgInBinary;

/***********************************************************************/

static unsigned long WINAPI FindNextActive(LPSTAT lpTopic, SYMPTR lpSymEnt, LPUDMSG lpMsg);
static unsigned long WINAPI FindPrevActive(LPSTAT lpTopic, SYMPTR lpSymEnt, LPUDMSG lpMsg);

LPHVOID FAR AllocateHeapArray (LPEXTARRAY array);
LPHVOID FAR ExtendHeapArray (LPEXTARRAY array);
BOOL FAR DeleteHeapArray (LPEXTARRAY array);

/***********************************************************************/
/** add a port to the list of ports **/

void
WINAPI
UdprotLinkPORT (LPPORT lpNewPort)
{
    if (lpNewPort != (LPPORT) NULL)
        AppendItemAtTail (&PortList, (LPCHAINLINK) lpNewPort);
} /* UdprotLinkPORT */

/***********************************************************************/
/** Set up port
    This function is called one time per port, by ProtAllocateLogicalDevice()
    to allocate and initialize the hardware resources.
    Returns pointer if successful, NULL otherwise **/

LPPORT
WINAPI
UdprotSetupPort(LPSTNPARAM lpStnParam)
{
    LPPORT          lpPort;

    /* attempt to allocate space for port structure */
    lpPort = (LPPORT) wwHeap_AllocPtr(hHeap,
                                      GMEM_MOVEABLE | GMEM_ZEROINIT,
                                      (DWORD) sizeof(PORT));

    if (lpPort == (LPPORT) NULL) {
        MessageBox(GetFocus(),
               GetString(STRUSER + 65)  /* "Can't allocate port struct" */ ,
               GetAppName(), MB_OK);
        return (LPPORT) NULL;
    }

    /* set port name */
    ExtractPortName (lpStnParam, lpPort->mbPortName, sizeof(lpPort->mbPortName));

    /* get configuration info for port */
    SetPortConfigInfo (lpPort, lpStnParam);

    /* attempt to start up port */
    if (!OpenPort(lpPort)) {
        /* start up failed, display error code, free port structure */
        UdprotFreePort(lpPort);
        return (LPPORT) NULL;
    }

    /* Initialize port state, chain it in */
    lpPort->mbState = PROT_IDLE;
    UdprotLinkPORT(lpPort);

    return lpPort;
} /* UdprotSetupPort */

/***********************************************************************/
/* check whether port name matches indicated string */

BOOL FAR PortNameMatch (LPCHAINLINK chain_link, void FAR *comparisonValue)
{
    BOOL status;
    LPSTR st;
    LPPORT lpPort;

    /* initialize return value */
    status = FALSE;

    /* get pointers and perform string comparison */
    lpPort = (LPPORT) chain_link;
    st = (LPSTR) comparisonValue;

    if (lstrcmp (lpPort->mbPortName, st) == 0)
        status = TRUE;

    /* indicate whether match was found */
    return (status);
} /* PortNameMatch */

/***********************************************************************/
/** find port with indicated name
    returns pointer if found, NULL otherwise */

LPPORT
WINAPI
UdprotFindPort(LPSTNPARAM lpStnParam)
{
    LPPORT          lpPort;
    char            portName[33];
    CHAINSCANNER    port_scanner;

    ExtractPortName (lpStnParam, portName, sizeof(portName));

    /* search for port with indicated name */
    lpPort = (LPPORT) FindFirstItem (&PortList,
                                 SCAN_FROM_HEAD,   /* search forward */
                                 PortNameMatch,    /* check if name matches */
                                 (LPSTR) portName, /* comparison value */
                                 &port_scanner);   /* used for FindNextItem */

    /* return pointer to port or NULL if not found */
    return (lpPort);
} /* UdprotFindPort */

/***********************************************************************/
/* check whether station ID matches indicated value */

BOOL FAR StationIDMatch (LPCHAINLINK chain_link, void FAR *comparisonValue)
{
    BOOL   status;
    IDLDEV id;
    LPSTAT lpTopic;

    /* initialize return value */
    status = FALSE;

    /* get pointer, value and perform comparison */
    lpTopic = (LPSTAT) chain_link;
    id = *((IDLDEV FAR *) comparisonValue);

    if (lpTopic->statIdLogDev == id)
        status = TRUE;

    /* indicate whether match was found */
    return (status);
} /* StationIDMatch */

/***********************************************************************/
/** find station on indicated port with indicated logical device ID
    returns pointer if found, NULL otherwise **/

LPSTAT
WINAPI
UdprotFindTopic(LPPORT lpPort, IDLDEV id)
{
    LPSTAT        lpTopic;
    CHAINSCANNER  topic_scanner;

    /* search for station with indicated ID */
    lpTopic = (LPSTAT) FindFirstItem (&lpPort->mbTopicList,
                                 SCAN_FROM_HEAD,   /* search forward */
                                 StationIDMatch,   /* check if ID matches */
                                 (IDLDEV FAR *) &id, /* comparison value */
                                 &topic_scanner);  /* used for FindNextItem */

    /* return pointer to station or NULL if not found */
    return (lpTopic);
} /* UdprotFindTopic */

/***********************************************************************/
/** allocate a new station on indicated port
    return pointer if successful, NULL otherwise */

LPSTAT
WINAPI
UdprotAllocateTopic(LPPORT lpPort)
{
    LPSTAT lpTopic;

    /* attempt to allocate space for station structure */
    lpTopic = (LPSTAT) wwHeap_AllocPtr(hHeap,
                                       GMEM_MOVEABLE | GMEM_ZEROINIT,
                                       (DWORD) sizeof(STAT));
    if (lpTopic != (LPSTAT) NULL) {
        /* initialize station parameters */
        lpTopic->statPort         = lpPort;
        lpTopic->statHdbStatus    = (HDB)NULL;
        lpTopic->statStatusActive = FALSE;
        lpTopic->statStatusDue    = FALSE;
        lpTopic->statFailed       = FALSE;
        lpTopic->statRetries      = TOPIC_CONSEC_FAILURE_LIMIT;
        lpTopic->statPortRetries  = TOPIC_NORMAL_RETRIES;
        lpTopic->statDelay        = 0L;

        /* clear the link with the list of stations */
        ClearChainLink (&lpTopic->statChainLink);

        /* initialize the symbol table extensible array */
        InitializeExtArray (&lpTopic->statSymTab,
                            SYMTABQUANTUM,      /* number to start with */
                            sizeof (SYMENT),    /* size of a symbol entry */
                            SYMTABQUANTUM,      /* number to extend each time */
                            AllocateHeapArray, ExtendHeapArray, DeleteHeapArray);

        /* initialize the used symbol index extensible array */
        InitializeExtArray (&lpTopic->statSymInd,
                            SYMTABQUANTUM,      /* number to start with */
                            sizeof (unsigned long), /* size of a symbol index */
                            SYMTABQUANTUM,      /* number to extend each time */
                            AllocateHeapArray, ExtendHeapArray, DeleteHeapArray);


        /* clear the symbol chains to empty */
        InitializeChain (&lpTopic->statSymUsed);
        InitializeChain (&lpTopic->statSymUnused);

        /* append new station to list of stations on this port */
        AppendItemAtTail (&lpPort->mbTopicList, (LPCHAINLINK) lpTopic);

        /* if this is the only station so far, use as current station */
        if (lpPort->mbTopicList.item_count == 1)
            lpPort->mbCurTopic = lpTopic;
    }

    /* return pointer or NULL if unable to allocate new station */
    return (lpTopic);
} /* UdprotAllocateTopic */

/***********************************************************************/
/** set up station on indicated port with indicated ID **/

LPSTAT
WINAPI
UdprotSetupTopic(LPPORT      lpPort,
                 LPSTNPARAM  lpTopicParam,
                 IDLDEV      idLogDev,
                 LPSTR       lpszTopic)
{
    LPSTAT  lpTopic;

    /* find station on this port with indicated ID, if any */
    lpTopic = UdprotFindTopic(lpPort, idLogDev);
    if (lpTopic == (LPSTAT) NULL) {
        /* no such station found, attempt to create a new one */
        lpTopic = UdprotAllocateTopic(lpPort);
    }
    if (lpTopic == (LPSTAT) NULL) {
        /* unable to find or create topic, return NULL and exit */
        return (LPSTAT) NULL;
    }

    /* initialize station parameters */
    lpTopic->statTopic        = lpTopicParam->spTopicID;
    lpTopic->statUpdatePeriod = lpTopicParam->spUpdatePeriod;
    lpTopic->statReplyTimeout = lpTopicParam->spReplyTimeout * 1000;
    lpTopic->statIdLogDev     = idLogDev;
    lpTopic->statRetries      = TOPIC_CONSEC_FAILURE_LIMIT;
    lpTopic->statPortRetries  = TOPIC_NORMAL_RETRIES;
    lpTopic->statDelay        = 0L;
    lstrcpy (lpTopic->statTopicName, lpszTopic);
    /************************************************************\
      Any driver dependent fields should be initialized here as
      required.
    \************************************************************/
    lpTopic->statCoilReadSize = (WORD) lpTopicParam->spCoilReadSize;
    lpTopic->statRegReadSize  = (WORD) lpTopicParam->spRegReadSize;

    /* return pointer to station */
    return lpTopic;
} /* UdprotSetupTopic */

/***********************************************************************/
/** perform logical address comparison between two symbol table entries
    returns -1, 0, +1 for <, =, >        **/

int
WINAPI
LogicalAddrCmp(SYMPTR a, SYMPTR b)
{
    /* compare device data types */
    if (a->msPlcDataType < b->msPlcDataType)
        return -1;
    if (a->msPlcDataType > b->msPlcDataType)
        return 1;

    /* data types same, compare addresses */
    if (a->msAddr1 < b->msAddr1)
        return -1;
    if (a->msAddr1 > b->msAddr1)
        return 1;

    /* addresses same, compare bit positions */
    if (a->msBitPos < b->msBitPos)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
三级精品在线观看| 欧美肥妇bbw| 成人av免费在线播放| 国产精品一区在线观看乱码| 免费av成人在线| 美女www一区二区| 蜜桃视频在线观看一区| 精品亚洲porn| 国产麻豆欧美日韩一区| 成人永久看片免费视频天堂| 成人黄色软件下载| 91啪亚洲精品| 欧美亚洲另类激情小说| 91超碰这里只有精品国产| 在线电影一区二区三区| 欧美一区二区三区性视频| 欧美成人国产一区二区| 久久男人中文字幕资源站| 欧美极品aⅴ影院| 专区另类欧美日韩| 亚洲一区二区中文在线| 天天影视涩香欲综合网| 麻豆视频一区二区| 国产精品一卡二| 99国产精品99久久久久久| 欧美性色综合网| 日韩一区二区三| 欧美高清在线一区| 亚洲最大成人综合| 蜜桃视频在线观看一区二区| 国产suv一区二区三区88区| 99re热视频精品| 欧美美女一区二区在线观看| 欧美va亚洲va国产综合| 国产精品免费观看视频| 五月天激情小说综合| 国产专区欧美精品| 91黄色免费观看| 日韩精品一区二区三区在线播放| 国产拍揄自揄精品视频麻豆| 亚洲国产日韩综合久久精品| 国模一区二区三区白浆| 色综合天天天天做夜夜夜夜做| 欧美精品自拍偷拍| 国产精品你懂的在线欣赏| 亚洲mv大片欧洲mv大片精品| 国产一区在线精品| 欧美在线免费观看亚洲| 久久人人爽爽爽人久久久| 亚洲精品va在线观看| 国产原创一区二区| 欧美亚日韩国产aⅴ精品中极品| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲四区在线观看| 开心九九激情九九欧美日韩精美视频电影 | 一本色道久久综合狠狠躁的推荐| 欧美高清激情brazzers| 国产精品区一区二区三区| 日韩精品免费视频人成| 97se亚洲国产综合自在线观| 精品日韩99亚洲| 亚洲综合在线第一页| 粉嫩高潮美女一区二区三区| 91精品国产麻豆| 亚洲人精品午夜| 国产一区欧美日韩| 欧美婷婷六月丁香综合色| 中文字幕欧美激情| 狂野欧美性猛交blacked| 欧美日韩久久一区二区| 亚洲欧美日韩在线不卡| 国产精品综合二区| 欧美一区二区美女| 亚洲第一成年网| 91美女在线看| 中文字幕二三区不卡| 久久99精品久久久久久动态图| 欧美巨大另类极品videosbest| 一区二区三区鲁丝不卡| 成人激情综合网站| 国产欧美一区二区精品仙草咪| 青青国产91久久久久久| 欧美人与性动xxxx| 亚洲综合清纯丝袜自拍| 99国产欧美久久久精品| 国产精品二三区| 成人午夜视频在线观看| 国产欧美日韩视频在线观看| 国产美女精品人人做人人爽| 久久亚洲捆绑美女| 国模无码大尺度一区二区三区| 日韩欧美中文字幕一区| 日韩中文欧美在线| 91精品国产综合久久福利| 性欧美疯狂xxxxbbbb| 欧美日韩一区不卡| 亚洲午夜电影在线观看| 欧美视频中文一区二区三区在线观看| 亚洲日本韩国一区| 色又黄又爽网站www久久| 亚洲欧美另类图片小说| 色婷婷国产精品综合在线观看| 亚洲欧美视频在线观看| 一本到不卡免费一区二区| 亚洲精品ww久久久久久p站| 在线视频国内自拍亚洲视频| 亚洲午夜国产一区99re久久| 欧美日韩高清一区二区三区| 日韩电影网1区2区| 日韩一区二区三区视频在线| 麻豆一区二区三区| 国产欧美日韩在线看| av一区二区三区四区| 一区二区三区四区亚洲| 欧美三区免费完整视频在线观看| 婷婷一区二区三区| 日韩久久免费av| 粉嫩av一区二区三区粉嫩| 日韩毛片精品高清免费| 在线影视一区二区三区| 视频一区视频二区中文字幕| 日韩女优毛片在线| 国产大片一区二区| 亚洲欧美另类图片小说| 7777女厕盗摄久久久| 国内久久婷婷综合| 国产精品超碰97尤物18| 欧美三级视频在线播放| 九一久久久久久| 国产精品福利一区二区三区| 91久久精品一区二区| 日韩 欧美一区二区三区| 久久综合色之久久综合| 91最新地址在线播放| 亚洲国产日韩精品| 久久综合成人精品亚洲另类欧美 | 91社区在线播放| 同产精品九九九| 国产午夜精品福利| 在线精品视频一区二区三四| 日本伊人色综合网| 中文字幕免费不卡| 精品污污网站免费看| 国产真实乱子伦精品视频| 亚洲天堂中文字幕| 日韩视频一区在线观看| av不卡免费在线观看| 免费成人深夜小野草| 中文字幕日韩一区| 欧美成人aa大片| 99久久精品免费看国产| 美女尤物国产一区| 亚洲丝袜美腿综合| 日韩欧美自拍偷拍| 91久久精品一区二区| 国产一区二区免费看| 亚洲国产精品一区二区www在线| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美在线观看视频一区二区三区| 久久爱另类一区二区小说| 一区二区三区免费在线观看| 久久精品这里都是精品| 欧美精品高清视频| 91在线观看一区二区| 九九视频精品免费| 亚洲国产日韩在线一区模特| 国产欧美日韩另类视频免费观看| 欧美一区午夜视频在线观看| 99久久久无码国产精品| 国产真实乱对白精彩久久| 五月婷婷另类国产| 日韩美女久久久| 欧美经典一区二区| 欧美一级二级在线观看| 91成人看片片| 99re在线精品| 国产乱码精品一区二区三| 青青草国产成人av片免费| 亚洲在线视频网站| 中文字幕中文字幕在线一区| 久久久美女毛片| 日韩精品最新网址| 6080yy午夜一二三区久久| 色综合欧美在线视频区| 成人国产精品免费观看| 国产精品1024| 国产老妇另类xxxxx| 久久99在线观看| 另类小说一区二区三区| 视频一区在线视频| 舔着乳尖日韩一区| 午夜视频在线观看一区| 亚洲已满18点击进入久久| 亚洲色图.com| 中文字幕一区二区三区在线观看| 欧美国产日韩精品免费观看| 久久久亚洲欧洲日产国码αv| 精品久久久久一区| 欧美精品一区二区三区四区| 日韩三级中文字幕|