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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? parsparm.cpp

?? Separator Print Processor Sample
?? CPP
字號:
/*++

Copyright (c) 1990-2003  Microsoft Corporation
All Rights Reserved


Abstract:

    Table and routine to send formfeed to a printer.

--*/
#include <windows.h>
//#include <WinSpool.h>

extern "C" {
	#include <winsplp.h>
}
#include <wchar.h>

#include "SeparatorPP.h"

/** Constants for our various states **/

#define ST_KEY      0x01        /** Looking for a key **/
#define ST_VALUE    0x02        /** Looking for a value **/
#define ST_EQUAL    0x04        /** Looking for an = sign **/
#define ST_EQNODATA 0x08        /** Looking for equal w/ no data **/
#define ST_DELIM    0x10        /** Looking for a ; **/
#define ST_DMNODATA 0x20        /** Looking for a ; w/ no data **/


/*++
*******************************************************************
    G e t K e y V a l u e

    Routine Description:
        Returns the value for a given key in the given
        parameter string.  The key/values are in the order of
        KEY = VALUE;.  The spaces are optional, the ';' is
        required and MUST be present, directly after the value.
        If the call fails, the return length will be 0 and the
        return code will give the error.  This routine is written
        as a state machine, driven by the current character. 

    Arguments:
        pParmString => Parameter string to parse
        pKeyName    => Key to search for
        ValueType   =  type of value to return, string or ULONG
        pDestLength => length of dest buffer on enter,
                       new length on exit.
        pDestBuffer => area to store the key value

    Return Value:
        0 if okay
        error if failed (from winerror.h)
*******************************************************************
--*/
USHORT
GetKeyValue(
    IN      PWCHAR  pParmString,
    IN      PWCHAR  pKeyName,
    IN      USHORT  ValueType,
    IN OUT  PUSHORT pDestLength,
    OUT     PVOID   pDestBuffer)
{
    PWCHAR  pKey, pVal, pValEnd = NULL;
    WCHAR   HoldChar;
    USHORT  State = ST_KEY;    /** Start looking for a key **/
    ULONG   length;

    /** If any of the pointers are bad, return error **/

    if ((pParmString == NULL) ||
        (pKeyName == NULL)    ||
        (pDestLength == NULL) ||
        (pDestBuffer == NULL)) {

        if (pDestLength) {
            *pDestLength = 0;
        }

        return ERROR_INVALID_PARAMETER;
    }

    /**
        If we are looking for a ULONG, make sure they passed
        in a big enough buffer.
    **/

    if (ValueType == VALUE_ULONG) {
        if (*pDestLength < sizeof(ULONG)) {
            *pDestLength = 0;
            return ERROR_INSUFFICIENT_BUFFER;
        }
    }
        
    while (pParmString && *pParmString) {

        /**
            Update our state, if necessary, depending on
            the current character.
        **/

        switch (*pParmString) {

        /**
            We got a white space.  If we were looking for an equal
            sign or delimiter, then note that we got a space.  If
            we run across more data, then we have an error.
        **/

        case (WCHAR)' ':
        case (WCHAR)'\t':

            /**
                If we were looking for an equal sign,
                check to see if this is the key they
                wanted.  If not, jump to the next key.
            **/

            if (State == ST_EQUAL) {
                if (_wcsnicmp(pKey, pKeyName, lstrlen(pKeyName))) {
                    if (pParmString = wcschr(pParmString, (WCHAR)';')) {
                        pParmString++;
                    }
                    State = ST_KEY;
                    pValEnd = NULL;
                    break;
                }

                /** Looking for an equal sign with no more data **/

                State = ST_EQNODATA;
            }
            else if (State == ST_DELIM) {

                /** If this is the end of the value, remember it **/

                if (!pValEnd) {
                    pValEnd = pParmString;
                }

                /** Now looking for a delimiter with no more data **/

                State = ST_DMNODATA;
            }
            pParmString++;
            break;

        /**
            Found an equal sign.  If we were looking for one,
            then great - we will then be looking for a value.
            We will check to see if this is the key they wanted.
            Otherwise, this is an error and we will start over
            with the next key.
        **/

        case (WCHAR)'=':
            if (State == ST_EQUAL) {
                if (_wcsnicmp(pKey, pKeyName, lstrlen(pKeyName))) {

                    /** Error - go to next key **/

                    if (pParmString = wcschr(pParmString, (WCHAR)';')) {
                        pParmString++;
                    }
                    State = ST_KEY;
                    pValEnd = NULL;
                    break;
                }
                pParmString++;
                State = ST_VALUE;
            }
            else {

                /** Error - go to next key **/

                if (pParmString = wcschr(pParmString, (WCHAR)';')) {
                    pParmString++;
                }
                State = ST_KEY;
                pValEnd = NULL;
            }
            break;

        case (WCHAR)';':    
            if (State == ST_DELIM) {
                if (!pValEnd) {
                    pValEnd = pParmString;
                }
                if (ValueType == VALUE_ULONG) {
                    if (!iswdigit(*pVal)) {
                        if (pParmString = wcschr(pParmString, (WCHAR)';')) {
                            pParmString++;
                        }
                        State = ST_KEY;
                        pValEnd = NULL;
                        break;
                    }
                    *(PULONG)pDestBuffer = wcstoul(pVal, NULL, 10);
                    return 0;
                }
                else if (ValueType == VALUE_STRING) {

                    /**
                        ASCIIZ the value to copy it out without
                        any trailing spaces.
                    **/

                    HoldChar = *pValEnd;
                    *pValEnd = (WCHAR)0;

                    /** Make sure the buffer is big enough **/

                    length = lstrlen(pVal);
                    if (*pDestLength < (length+1) * sizeof(WCHAR) ) {
                        *pDestLength = 0;
                        return ERROR_INSUFFICIENT_BUFFER;
                    }

                    /**
                        Copy the data, restore the character where
                        we ASCIIZ'd the string, set up the length
                        and return.
                    **/

                    StringCchCopy ( (LPWSTR)pDestBuffer, *pDestLength/sizeof(WCHAR), pVal);
                    *pValEnd = HoldChar;
                    *(PULONG)pDestLength = length;
                    return 0;
                }
            }
            else {

                /** We weren't looking for a delimiter - next key **/

                State = ST_KEY;
                pValEnd = NULL;
                pParmString++;
            }
            break;

        /**
            Found some data.  If we had hit a space,
            and were expecting a equal sign or delimiter,
            this is an error.
        **/

        default:
            if ((State == ST_EQNODATA) ||
                (State == ST_DMNODATA)) {
                if (pParmString = wcschr(pParmString, (WCHAR)';')) {
                    pParmString++;
                }
                State = ST_KEY;
                pValEnd = NULL;
                break;
            }
            else if (State == ST_KEY) {
                pKey = pParmString;
                State = ST_EQUAL;
            }
            else if (State == ST_VALUE) {
                pVal = pParmString;
                State = ST_DELIM;
            }
            pParmString++;
            break;
        } /* End switch */
    } /* While parms data */

    *pDestLength = 0;
    return ERROR_NO_DATA;
}





?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久精品欧美丰满| 国产精品国产馆在线真实露脸 | 精品一区二区三区视频在线观看| 免费在线视频一区| 不卡一区在线观看| 欧美人xxxx| 久久精品欧美一区二区三区不卡 | 久久综合九色综合久久久精品综合| 精品国产免费久久| 日韩一区在线看| 精品亚洲免费视频| 欧美日韩精品专区| 日韩一区二区三区在线观看| 2021久久国产精品不只是精品| 成人欧美一区二区三区1314| 美女脱光内衣内裤视频久久网站| 国产美女久久久久| 欧美日韩一区三区四区| 亚洲国产精品激情在线观看| 天堂精品中文字幕在线| 国产在线精品一区二区三区不卡 | 欧美日韩在线播放三区四区| 国产日韩精品久久久| 午夜欧美在线一二页| 成人黄色小视频在线观看| 欧美老女人第四色| 成人91在线观看| 一区二区国产盗摄色噜噜| 国产成人在线视频播放| 欧美自拍丝袜亚洲| 国产精品热久久久久夜色精品三区| 一区二区日韩av| 日本午夜精品视频在线观看| 色妞www精品视频| 26uuu国产一区二区三区| 日本美女一区二区三区| 97成人超碰视| 国产精品麻豆一区二区| 国产99久久久精品| 亚洲国产成人一区二区三区| 国产中文一区二区三区| 欧美精品一区二区三区蜜桃视频 | 中文字幕欧美激情一区| 黑人巨大精品欧美一区| 欧美一区二区三区免费| 亚洲综合小说图片| av福利精品导航| 亚洲欧洲日韩在线| 91国模大尺度私拍在线视频| www.久久精品| 欧美电视剧在线观看完整版| 欧美在线不卡一区| 亚洲黄一区二区三区| 91啪亚洲精品| 亚洲欧洲制服丝袜| 在线一区二区三区四区| 亚洲一区二区五区| 不卡欧美aaaaa| 亚洲欧美综合色| 在线影视一区二区三区| 亚洲成人午夜影院| 欧美人xxxx| 久久精品72免费观看| 精品乱人伦一区二区三区| 久久国产精品色| 久久久久久久久一| 国产超碰在线一区| 一区二区三区在线影院| 欧美吞精做爰啪啪高潮| 美女免费视频一区| 国产精品久久久久三级| 国产乱子伦视频一区二区三区 | 毛片不卡一区二区| 久久色在线观看| 成人小视频免费在线观看| 婷婷六月综合亚洲| 亚洲视频资源在线| 久久亚洲私人国产精品va媚药| 91国偷自产一区二区三区观看| 日本美女视频一区二区| 1区2区3区精品视频| 日韩欧美国产三级| 欧美日韩久久不卡| 99re8在线精品视频免费播放| 美女精品一区二区| 五月天一区二区| 亚洲免费伊人电影| 国产精品乱码一区二区三区软件| 欧美一区二区三区播放老司机| 91在线观看成人| 成人免费看黄yyy456| 久久激情综合网| 午夜视频在线观看一区二区三区| 国产精品久久影院| 国产亚洲一区二区三区在线观看| 69堂国产成人免费视频| 91九色02白丝porn| 色综合久久久久| 99re热这里只有精品免费视频| 国产一区二区三区日韩 | 一区二区三区不卡视频在线观看 | 日韩国产成人精品| 亚洲一区成人在线| 亚洲一区二区三区国产| 亚洲人成精品久久久久| 日韩理论片在线| 中文字幕免费在线观看视频一区| 久久久亚洲精品一区二区三区| 欧美成人伊人久久综合网| 日韩欧美黄色影院| 精品福利在线导航| 精品国产乱码久久| 久久亚洲捆绑美女| 国产欧美久久久精品影院| 国产欧美一区二区三区网站| 欧美精品一区二区在线观看| 亚洲精品一区二区三区99| 国产性做久久久久久| 国产精品国产三级国产三级人妇| 中文字幕电影一区| 亚洲精品乱码久久久久久久久| 亚洲尤物在线视频观看| 亚洲午夜电影在线观看| 视频在线在亚洲| 精品一区二区三区免费播放| 国产精品一区在线| 99综合影院在线| 91黄色小视频| 日韩一区二区三区四区五区六区| 精品人在线二区三区| 欧美国产精品中文字幕| 日韩美女久久久| 丝袜美腿亚洲一区二区图片| 久久99久国产精品黄毛片色诱| 国产成人精品www牛牛影视| 99在线热播精品免费| 欧美区视频在线观看| 精品捆绑美女sm三区| 亚洲国产精品激情在线观看| 一区2区3区在线看| 麻豆91在线播放| 国产91富婆露脸刺激对白| 在线视频一区二区三区| 日韩欧美一区二区在线视频| 久久久噜噜噜久久中文字幕色伊伊| 日本一区二区三区久久久久久久久不 | 综合网在线视频| 水蜜桃久久夜色精品一区的特点| 国产在线精品一区二区| 91麻豆免费在线观看| 欧美变态tickling挠脚心| 1000部国产精品成人观看| 亚洲成人黄色影院| 大美女一区二区三区| 欧美乱妇15p| 中文字幕在线不卡一区二区三区| 亚洲不卡一区二区三区| 成人精品视频一区二区三区尤物| 欧美综合欧美视频| 中文字幕不卡一区| 捆绑紧缚一区二区三区视频| 99精品久久只有精品| 欧美成人a∨高清免费观看| 亚洲综合免费观看高清完整版在线| 韩国精品久久久| 欧美嫩在线观看| 国产精品久久久久一区二区三区 | 亚洲自拍欧美精品| 国产精品69久久久久水密桃| 在线观看精品一区| 国产精品国产三级国产普通话三级 | 自拍偷拍欧美精品| 国产一区二区三区四区在线观看| 欧美视频一区在线| 亚洲欧美综合在线精品| 国产精品一级在线| 日韩亚洲欧美在线| 午夜精品久久久| 欧美视频中文字幕| 一区二区三区av电影| 成人午夜视频福利| 久久综合九色欧美综合狠狠| 日韩黄色免费电影| 欧美三区在线观看| 亚洲精品中文字幕乱码三区| 成人精品国产福利| 久久久久久久网| 国产成人啪午夜精品网站男同| 日韩欧美国产不卡| 日本成人中文字幕| 91精品综合久久久久久| 亚洲国产精品久久一线不卡| 91欧美一区二区| 一区二区三区中文免费| 一本到高清视频免费精品| 亚洲视频在线一区观看| a4yy欧美一区二区三区| 亚洲情趣在线观看| 91国偷自产一区二区使用方法| 亚洲精品欧美综合四区|