亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
99在线视频精品| 视频在线在亚洲| 91丝袜美腿高跟国产极品老师 | 国产丝袜在线精品| 成人性色生活片免费看爆迷你毛片| 国产亚洲精品福利| 99久久99久久精品国产片果冻 | 成人永久免费视频| 成人免费在线播放视频| 在线观看亚洲专区| 青青草国产精品97视觉盛宴| 日韩一区二区三区电影在线观看| 国产精品香蕉一区二区三区| 亚洲色图制服诱惑| 欧美一区二区视频在线观看2020| 韩国三级中文字幕hd久久精品| 欧美激情在线观看视频免费| 91九色02白丝porn| 美女在线视频一区| 国产精品久99| 91精品国产综合久久精品麻豆| 国产精品一区二区无线| 亚洲欧美韩国综合色| 欧美一区二区女人| 91色综合久久久久婷婷| 美女尤物国产一区| 亚洲精品第一国产综合野| 精品久久国产97色综合| 91黄色免费版| 国产白丝网站精品污在线入口| 图片区小说区国产精品视频| 久久久久99精品一区| 欧美日韩一级片网站| 成人久久视频在线观看| 日本成人在线网站| 亚洲欧美色综合| 久久久不卡影院| 在线成人免费观看| 91网址在线看| 懂色av一区二区在线播放| 亚洲国产毛片aaaaa无费看| 国产日产欧产精品推荐色| 7777精品伊人久久久大香线蕉的| 成人午夜大片免费观看| 美女网站一区二区| 亚洲成人免费在线| 亚洲精品成人悠悠色影视| 久久精品亚洲一区二区三区浴池| 欧美精品日日鲁夜夜添| 色综合天天做天天爱| 国产69精品久久久久777| 美女一区二区在线观看| 天堂av在线一区| 一区二区三区四区视频精品免费| 国产精品嫩草99a| 久久久美女艺术照精彩视频福利播放| 88在线观看91蜜桃国自产| 欧美专区日韩专区| 91免费视频网| 99久久久精品免费观看国产蜜| 国产一区在线观看视频| 蜜臂av日日欢夜夜爽一区| 日本在线播放一区二区三区| 午夜精品福利一区二区蜜股av | 亚洲午夜免费电影| 亚洲乱码国产乱码精品精小说 | 成人91在线观看| 福利一区在线观看| 国产精品一二三四五| 蜜臀a∨国产成人精品| 青青草成人在线观看| 性做久久久久久免费观看欧美| 一区二区高清在线| 亚洲丝袜另类动漫二区| 国产精品天干天干在线综合| 中文字幕成人网| 欧美激情在线一区二区三区| 国产精品伦理一区二区| 国产精品国产a级| 中文字幕亚洲一区二区va在线| 国产精品久久一卡二卡| 综合久久一区二区三区| 一区二区三区在线视频免费| 一区二区三区欧美激情| 亚洲国产精品嫩草影院| 亚洲地区一二三色| 美腿丝袜亚洲色图| 国产一区91精品张津瑜| 国产成a人亚洲| 成人黄页在线观看| 91久久国产最好的精华液| 欧美日本一区二区在线观看| 91精品国产91久久久久久一区二区 | 欧美刺激午夜性久久久久久久| 日韩一本二本av| 国产亚洲精久久久久久| 亚洲免费资源在线播放| 天天av天天翘天天综合网色鬼国产 | 色婷婷综合久久久中文字幕| 欧美日本韩国一区二区三区视频 | 久久久亚洲高清| 国产精品不卡一区二区三区| 亚洲一二三四在线观看| 免费高清不卡av| 国内精品在线播放| 91免费版在线看| 在线播放一区二区三区| 久久女同互慰一区二区三区| 亚洲精品欧美激情| 首页国产欧美久久| 国内精品免费**视频| 91网站最新地址| 欧美成人r级一区二区三区| 国产精品夫妻自拍| 麻豆精品一二三| 91麻豆国产在线观看| 精品噜噜噜噜久久久久久久久试看| 亚洲精品一区二区三区精华液| 亚洲天堂2014| 国产一区不卡在线| 欧美另类videos死尸| 国产精品少妇自拍| 热久久国产精品| 91视频一区二区三区| 久久亚洲综合色一区二区三区| 亚洲网友自拍偷拍| 国产99精品国产| 欧美v日韩v国产v| 亚洲综合色网站| 岛国av在线一区| 日韩一级片网站| 亚洲国产成人高清精品| 丰满少妇在线播放bd日韩电影| 欧美日韩成人在线一区| 亚洲视频一区在线观看| 韩国av一区二区三区在线观看| 欧美少妇bbb| 亚洲免费电影在线| 成人激情综合网站| 久久女同互慰一区二区三区| 日韩极品在线观看| 欧美性猛交xxxx乱大交退制版| 欧美极品美女视频| 国产露脸91国语对白| 欧美va日韩va| 麻豆高清免费国产一区| 91九色最新地址| 亚洲欧洲精品成人久久奇米网| 久久精品免费观看| 91精品久久久久久蜜臀| 亚洲丶国产丶欧美一区二区三区| av中文字幕在线不卡| 亚洲国产精品精华液2区45| 国产美女在线精品| 久久免费美女视频| 精品一区二区三区不卡| 精品乱人伦小说| 蜜臀av在线播放一区二区三区| 欧美日韩一级片在线观看| 亚洲欧洲综合另类| 在线精品视频一区二区| 一区二区久久久久| 精品视频一区二区不卡| 亚洲一级二级三级在线免费观看| 91精品办公室少妇高潮对白| 亚洲桃色在线一区| 岛国一区二区在线观看| 中文字幕一区二区三区视频 | 亚洲制服丝袜在线| 欧美色欧美亚洲另类二区| 亚洲综合色成人| 欧美色图12p| 日韩成人一级大片| 日韩欧美成人激情| 国产激情精品久久久第一区二区| 久久精品视频一区二区| 懂色av一区二区三区免费观看 | 亚洲女同女同女同女同女同69| 色综合久久99| 无码av中文一区二区三区桃花岛| 91麻豆精品91久久久久同性| 美国十次了思思久久精品导航| 久久影音资源网| av中文字幕一区| 亚洲成人动漫在线免费观看| 6080日韩午夜伦伦午夜伦| 国产一区日韩二区欧美三区| 久久精品一级爱片| 91麻豆高清视频| 天天亚洲美女在线视频| 亚洲精品在线观看视频| 成人教育av在线| 香蕉影视欧美成人| 久久久国产精品午夜一区ai换脸| 99久久国产综合精品女不卡| 日韩专区中文字幕一区二区| 久久久久久久久97黄色工厂| 成人精品视频.| 香蕉影视欧美成人| 国产女同性恋一区二区|