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

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

?? picslip.h

?? 著名的《tcplean》的配套光盤
?? H
字號:
/* SLIP I/O functions for PIC Web server Copyright (c) Iosoft Ltd 2000
**
** This software is only licensed for distribution with the book 'TCP/IP Lean', 
** and may only be used for personal experimentation by the purchaser 
** of that book, on condition that this copyright notice is retained. 
** For commercial licensing, contact license@iosoft.co.uk
**
** This is experimental software; use it entirely at your own risk */

/* Revisions:
** v0.01 JPB 30/3/00 Functions extracted from PICWEB v0.14
*/

#define TXBUFFLEN  96       // Tx buffer
#define RXBUFFLEN  80       // Rx buffer: more than enough for a 32-byte Ping
#define RXHDR_LEN  40       // After header, data is checksummed on arrival

#define SLIP_END    0xc0    // SLIP escape codes
#define SLIP_ESC    0xdb
#define ESC_END     0xdc
#define ESC_ESC     0xdd

BYTE txbuff[TXBUFFLEN];     // Transmit buffer
int txin, txout;            // Buffer I/P and O/P counters
WORD txi2c;                 // Count of i2c bytes to be sent
BOOL txflag;                // Flag to start sending out Tx data

BYTE rxbuff[RXBUFFLEN];     // Receive buffer, I/O ptrs, and 'Rx full' flag
int rxin, rxout, rxcount;
BOOL rxflag;
BOOL modemflag;             // Flag to show modem command received

BOOL slipend;               // Flag to mark end of I/P SLIP message
BOOL checkflag;             // Checksum flag & byte values
BYTE checkhi, checklo;
BOOL rdcheckflag;           // Checksum for Rx data (excl. IP & TCP hdrs)
BYTE rdcheckhi, rdchecklo;
int dropcount;

/* Prototypes for this file */
int get_data(BYTE *ptr, int maxlen);
BOOL get_byte(BYTE &b);
BOOL get_word(WORD &w);
BOOL get_lword(LWORD &lw);
BOOL get_hexbyte(BYTE &val);
void discard_data(void);
BYTE getch_slip(void);
BOOL match_byte(BYTE b);
BOOL match_word(WORD w);
BOOL match_str(char *s);
void skip_space(void);
BOOL skip_byte();
BOOL skip_word();
BOOL skip_lword();
int check_str(char *s);
void check_byte(BYTE b);
void check_word(WORD w);
void check_lword(LWORD &lw);
void check_bytes(BYTE *dat, int len);
void put_byte(BYTE b);
void put_str(char *s);
void put_null(void);
void put_word(WORD w);
void put_nullw(void);
void put_lword(LWORD &lw);
void tx_start(void);
void tx_byte(BYTE b);
void tx_end(void);
void check_txbytes(int n);
BYTE read_txbuff(int &oset);
void write_txbuff(int &oset, BYTE &b);

/* Get incoming data in buffer; discard any buffer overflow */
int get_data(BYTE *ptr, int maxlen)
{
    BYTE b;
    int n=0;

    while (maxlen-- > 0 && get_byte(b))
    {
        *ptr++ = b;
        n++;
    }
    discard_data();
    return(n);
}

/* Discard incoming data */
void discard_data(void)
{
    while (!slipend)
        getch_slip();
}

/* Get an incoming byte value, return 0 if end of message */
BOOL get_byte(BYTE &b)
{
    b = getch_slip();
    return(!slipend);
}

/* Get an incoming word value, return 0 if end of message */
BOOL get_word(WORD &w)
{
    BYTE hi, lo;

    hi = getch_slip();
    lo = getch_slip();
    w = ((WORD)hi<<8) | (WORD)lo;
    return(!slipend);
}
/* Get an incoming lword value, return 0 if end of message */
BOOL get_lword(LWORD &lw)
{
    lw.b[3] = getch_slip();
    lw.b[2] = getch_slip();
    lw.b[1] = getch_slip();
    lw.b[0] = getch_slip();
    return(!slipend);
}

/* Get an incoming byte value as 1 or 2 hex characters */
BOOL get_hexbyte(BYTE &val)
{
    BYTE b;
    BOOL ok=0;

    val = 0;
    while (isxdigit(rxbuff[rxout]) && get_byte(b))
    {
        ok = 1;
        val <<= 4;
        if (b <= '9')
            val += b - '0';
        else
            val += (b-'A'+10) & 0xf;
    }
    return(ok);
}

/* Get a SLIP byte from buffer; if end, set flag */
BYTE getch_slip(void)
{
    BYTE b=0;

    slipend = rxout>=rxcount;
    if (!slipend)
    {
        b = rxbuff[rxout++];
        check_byte(b);
    }
    return(b);
}

/* Match an incoming byte value, return 0 not matched, or end of message */
BOOL match_byte(BYTE b)
{
    return(b==getch_slip() && !slipend);
}
/* Match an incoming byte value, return 0 not matched, or end of message */
BOOL match_word(WORD w)
{
    WORD inw;

    return(get_word(inw) && inw==w);
}
/* Match a string value, return 0 (and don't move O/P ptr) if not matched */
BOOL match_str(char *s)
{
    BOOL ok=1;
    int rxo;

    rxo = rxout;
    while (ok && *s)
        ok = match_byte(*s++);
    if (!ok)
        rxout = rxo;
}

/* Skip whitespace & ctrl chars in incoming data */
void skip_space(void)
{
    while (rxbuff[rxout] <= ' ')
        getch_slip();
}
/* Skip an incoming byte value, return 0 if end of message */
BOOL skip_byte()
{
    getch_slip();
    return(!slipend);
}
/* Skip an incoming byte value, return 0 if end of message */
BOOL skip_word()
{
    getch_slip();
    getch_slip();
    return(!slipend);
}
/* Skip an incoming byte value, return 0 if end of message */
BOOL skip_lword()
{
    getch_slip();
    getch_slip();
    getch_slip();
    getch_slip();
    return(!slipend);
}

/* Compute checksum of a string, return its length */
int check_str(char *s)
{
    char c;
    int n=0;

    while ((c = s[n])!=0)
    {
        check_byte(c);
        n++;
    }
    return(n);
}

/* Add byte to checksum value */
void check_byte(BYTE b)
{
    if (checkflag)
    {
        if ((checklo = b+checklo) < b)
        {
            if (++checkhi == 0)
                checklo++;
        }
    }
    else
    {
        if ((checkhi = b+checkhi) < b)
        {
            if (++checklo == 0)
                checkhi++;
        }
    }
    checkflag = !checkflag;
}
/* Add word to checksum value */
void check_word(WORD w)
{
    check_byte(w>>8);
    check_byte(w);
}
/* Add longword to checksum value */
void check_lword(LWORD &lw)
{
    check_byte(lw.b[3]);
    check_byte(lw.b[2]);
    check_byte(lw.b[1]);
    check_byte(lw.b[0]);
}

/* Add array of bytes to checksum value */
void check_bytes(BYTE *dat, int len)
{
    while (len--)
        check_byte(*dat++);
}

/* Start a transmission */
void tx_start(void)
{
    putchar(SLIP_END);
}

/* Encode and transmit a single SLIP byte */
void tx_byte(BYTE b)
{
    if (b==SLIP_END || b==SLIP_ESC)
    {
        putchar(SLIP_ESC);
        putchar(b==SLIP_END ? ESC_END : ESC_ESC);
    }
    else
        putchar(b);
}

/* End a transmission, start sending it out */
void tx_end(void)
{
    txflag = 1;
}

/* Send a byte out to the SLIP link, then add to checksum */
void put_byte(BYTE b)
{
    if (txin < TXBUFFLEN)
    {
        write_txbuff(txin, b);
        txin++;
    }
    check_byte(b);
}

/* Send a string out to the SLIP link, add to checksum */
void put_str(char *s)
{
    while (*s)
        put_byte(*s++);
}

/* Send a null out to the SLIP link */
void put_null(void)
{
    put_byte(0);
}

/* Send a word out to the SLIP link, then add to checksum */
void put_word(WORD w)
{
    put_byte(w >> 8);
    put_byte(w);
}

/* Send a null word out to the SLIP link */
void put_nullw(void)
{
    put_byte(0);
    put_byte(0);
}

void put_lword(LWORD &lw)
{
    put_byte(lw.b[3]);
    put_byte(lw.b[2]);
    put_byte(lw.b[1]);
    put_byte(lw.b[0]);
}

/* Compute checksum of Tx bytes, given count */
void check_txbytes(int n)
{
    while (n--)
    {
        check_byte(read_txbuff(txin));
        txin++;
    }
}

/* Read a byte from the Tx buffer */
BYTE read_txbuff(int &oset)
{
    return(txbuff[oset]);
}

/* Write a byte to the Tx buffer */
void write_txbuff(int &oset, BYTE &b)
{
    txbuff[oset] = b;
}

/* Rx interrupt handler */
#INT_RDA
void rx_handler(void)
{
    BYTE b;
    BOOL escflag;

    if (kbhit())                    // Make sure serial character received
    {
        if ((b = getchar()) == SLIP_ESC)
            escflag = 1;            // SLIP escape character?
        else if (b == SLIP_END)
        {                           // SLIP end-of-frame character?
            if (rxin > 0)
            {                       // If non-zero frame length..
                rxflag = 1;         // ..set Rx frame flag
                rxcount = rxin;     // Reset counter for new frame
                rxin = 0;
            }
        }                           // Modem command 'AT...<CR>'?
        else if (b=='\r' && rxbuff[0]=='A')
        {
            modemflag = 1;          // Set flag (can't be handled on interrupt)
            rxin = 0;
        }
        else                        // Normal SLIP character..
        {
            if (escflag)            // ..following an escape char?
                b = b==ESC_END ? SLIP_END : b==ESC_ESC ? SLIP_ESC : b;
            escflag = 0;
            if (rxin == RXHDR_LEN-1)
            {                       // If nearly at end of hdrs, reset checksum
                rdcheckhi = rdchecklo = 0;
                rdcheckflag = 0;
            }                       // If after headers, calculate checksum
            if (rxin >= RXHDR_LEN)
            {                       // Alternate between checksum bytes..
                if (rdcheckflag)
                {                   // Update lo byte value
                    if ((rdchecklo = b+rdchecklo) < b)
                    {               // If lo byte overflow, increment hi byte
                        if (++rdcheckhi == 0)
                            rdchecklo++;
                    }               // ..and maybe carry back to lo byte!
                }
                else
                {                   // Update hi byte value
                    if ((rdcheckhi = b+rdcheckhi) < b)
                    {               // If hi byte overflow, increment lo byte
                        if (++rdchecklo == 0)
                            rdcheckhi++;
                    }               // ..and maybe carry back to hi byte!
                }
                rdcheckflag = !rdcheckflag; // Next time, check other byte
            }
            if (rxin < RXBUFFLEN)   // Save char if room left in buffer
            {
                rxbuff[rxin++] = b;
            }
        }
    }
}
/* EOF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕第一区第二区| 日韩一级欧美一级| 午夜欧美在线一二页| 日韩一区二区免费视频| 国产成人在线免费| 一区二区在线观看视频| 在线播放/欧美激情| 免费视频一区二区| 国产欧美精品国产国产专区| 91看片淫黄大片一级| 午夜精品久久久久久久| 欧美精品一区二区在线观看| 久久97超碰国产精品超碰| 国产精品免费免费| 777色狠狠一区二区三区| 国产福利一区在线| 亚洲综合一区在线| xfplay精品久久| 91视频xxxx| 久久99国产精品久久| 亚洲日本va午夜在线电影| 亚洲男女毛片无遮挡| 欧美日韩国产首页| www.日韩在线| 青青草原综合久久大伊人精品| 欧美激情中文字幕| 正在播放亚洲一区| 99视频一区二区三区| 麻豆成人91精品二区三区| 国产精品夫妻自拍| 精品国产精品一区二区夜夜嗨 | 美女精品一区二区| 亚洲色图.com| 精品粉嫩aⅴ一区二区三区四区| 99精品欧美一区二区三区小说 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲一区二区成人在线观看| 久久久天堂av| 欧美一区二区三区在线电影 | 欧美三级电影在线观看| 国产精品系列在线观看| 亚洲国产视频网站| 中文字幕一区二区三区色视频 | 欧美男女性生活在线直播观看| 国产成人午夜视频| 日本午夜精品一区二区三区电影| 亚洲美女免费视频| 中文字幕中文字幕中文字幕亚洲无线| 日韩片之四级片| 欧美日韩精品一区二区三区 | 亚洲精品一二三| 欧美国产欧美亚州国产日韩mv天天看完整| 91精品啪在线观看国产60岁| 国产精品久久久久久久久晋中 | 国产成人在线免费| 久久99蜜桃精品| 寂寞少妇一区二区三区| 国产呦精品一区二区三区网站| 国产乱妇无码大片在线观看| 成人在线综合网| 91浏览器在线视频| 欧美日韩国产区一| 精品入口麻豆88视频| 久久精品视频在线看| 国产精品久久二区二区| 一区二区三区不卡在线观看| 日韩中文字幕1| 激情文学综合丁香| 不卡一区在线观看| 精品视频免费在线| 精品国产乱码久久久久久免费| 久久久精品tv| 一区二区三区欧美久久| 免费在线观看一区| 成人午夜免费视频| 欧美在线免费观看视频| 欧美大胆人体bbbb| 成人欧美一区二区三区视频网页| 亚洲一卡二卡三卡四卡无卡久久 | 成人av午夜影院| 色乱码一区二区三区88| 欧美一区二区在线免费观看| 欧美精品一区二区久久久| 中文字幕一区二区日韩精品绯色| 亚洲国产精品麻豆| 国产精品中文字幕一区二区三区| 日本精品视频一区二区三区| 日韩亚洲欧美在线观看| 中文字幕一区二区三区在线不卡| 天天免费综合色| 成人免费av网站| 777亚洲妇女| 综合精品久久久| 色悠悠亚洲一区二区| 精品久久久久香蕉网| 亚洲中国最大av网站| 国产精品123| 欧美日韩精品三区| 中文字幕精品一区| 青青草精品视频| 一本大道综合伊人精品热热| 精品国产一区二区三区久久影院 | 亚洲国产欧美在线人成| 国产一区 二区 三区一级| 91福利在线播放| 国产亚洲精品福利| 热久久久久久久| 日本久久电影网| 国产精品视频观看| 激情欧美日韩一区二区| 欧美在线999| 中文字幕色av一区二区三区| 免费久久精品视频| 欧美三级在线看| 亚洲色图另类专区| 成熟亚洲日本毛茸茸凸凹| 欧美v国产在线一区二区三区| 亚洲午夜在线视频| 色综合久久88色综合天天6 | 亚洲嫩草精品久久| 国产高清不卡二三区| 欧美成人欧美edvon| 日韩**一区毛片| 欧美性做爰猛烈叫床潮| 亚洲欧美区自拍先锋| 99热在这里有精品免费| 国产欧美视频一区二区| 九色porny丨国产精品| 欧美一区二区三区在线| 丝袜美腿亚洲综合| 欧美熟乱第一页| 成人性色生活片| 国产亚洲1区2区3区| 经典三级一区二区| 欧美va亚洲va香蕉在线| 老司机精品视频一区二区三区| 在线观看91av| 三级欧美在线一区| 欧美日韩精品免费观看视频 | 国产精品羞羞答答xxdd| 日韩午夜精品视频| 午夜精品成人在线| 欧美日韩视频不卡| 日韩福利电影在线| 日韩精品一区二区在线观看| 蜜桃视频一区二区| 日韩欧美中文字幕公布| 久久电影网站中文字幕| 欧美成人一区二区三区片免费| 久久精品国产网站| 久久久不卡影院| 成人h动漫精品一区二区| 中文字幕日韩精品一区| 日本精品一区二区三区四区的功能| 一区二区三区四区五区视频在线观看| 欧美中文字幕一区二区三区亚洲| 亚洲一级二级在线| 91精品国产综合久久福利| 蜜臀精品一区二区三区在线观看| 欧美大片拔萝卜| 成人免费视频免费观看| 亚洲精品免费电影| 7777精品伊人久久久大香线蕉的| 日本欧洲一区二区| 国产亚洲一区二区三区四区 | 精品国产百合女同互慰| 国产成人精品综合在线观看 | 久久精品人人爽人人爽| 丁香激情综合国产| 亚洲一区二区三区美女| 精品国产免费久久 | 日韩丝袜情趣美女图片| 精品亚洲成a人| 日韩一区欧美小说| 欧美精品自拍偷拍动漫精品| 紧缚捆绑精品一区二区| 亚洲青青青在线视频| 91精品国产综合久久婷婷香蕉| 国产在线日韩欧美| 亚洲精品日韩一| 欧美电影免费观看高清完整版在| 国产ts人妖一区二区| 一区二区三区精品在线| 欧美tk—视频vk| 99re热这里只有精品视频| 日韩成人午夜电影| 中文字幕中文乱码欧美一区二区 | 久热成人在线视频| 国产精品久久久久久久久免费桃花| 精品视频资源站| 粉嫩嫩av羞羞动漫久久久| 欧美精品一卡二卡| 亚洲国产色一区| 精品女同一区二区| 成人av资源在线观看| 亚洲自拍另类综合| 日韩欧美三级在线| 成人高清免费观看| 亚洲成人一区二区| 欧美精品一区二区三区视频|