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

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

?? netutil.c

?? 內(nèi)容包括: 嵌入式TCPIP協(xié)議棧應(yīng)用主機(jī)端程序(VC6源碼);如何構(gòu)造嵌入式Linux系統(tǒng);基于ARM的嵌入式TCPIP協(xié)議的實(shí)現(xiàn)等
?? C
?? 第 1 頁 / 共 2 頁
字號:
}

/* Return a pointer to the first char after any whitespace */
char *skipspace(char *str)
{
    while (isspace(*str))
        str++;
    return(str);
}

/* Return a pointer to the first char after any whitespace or punctuation */
char *skippunct(char *str)
{
    while (isspace(*str) || ispunct(*str))
        str++;
    return(str);
}

/* Check whether a sequence value lies within two others, return 0 if not */
int in_limits(LWORD val, LWORD lo, LWORD hi)
{
    long lodiff, hidiff;

    lodiff = val - lo;
    hidiff = hi - val;
    return(lodiff>=0 && hidiff>=0);
}

/* Return total length of data in buffer */
WORD buff_dlen(CBUFF *bp)
{
    return((WORD)((bp->in - bp->out) & (bp->len - 1)));
}
/* Return length of untried (i.e. unsent) data in buffer */
WORD buff_untriedlen(CBUFF *bp)
{
    return((WORD)((bp->in - bp->trial) & (bp->len - 1)));
}
/* Return length of trial data in buffer (i.e. data sent but unacked) */
WORD buff_trylen(CBUFF *bp)
{
    return((WORD)((bp->trial - bp->out) & (bp->len - 1)));
}
/* Return length of free space in buffer */
WORD buff_freelen(CBUFF *bp)
{
    return(bp->len ? bp->len - 1 - buff_dlen(bp) : 0);
}

/* Set all the buffer pointers to a starting value */
void buff_setall(CBUFF *bp, LWORD start)
{
    bp->out = bp->in = bp->trial = start;
}

/* Rewind the trial pointer by the given byte count, return actual count */
WORD buff_retry(CBUFF *bp, WORD len)
{
    len = minw(len, buff_trylen(bp));
    bp->trial -= len;
    return(len);
}

/* Pre-load data into buffer, i.e. copy into the given buffer location
** Check that existing data isn't overwritten, return byte count if OK.
** If data pointer is null, do check but don't transfer data */
WORD buff_preload(CBUFF *bp, LWORD oset, BYTE *data, WORD len)
{
    WORD in, n=0, n1, n2, free;
    long inoff;

    inoff = oset - bp->in;                  /* Offset of data from I/P ptr */
    in = (WORD)oset & (bp->len-1);          /* Mask I/P ptr to buffer area */
    free = buff_freelen(bp);                /* Free space in buffer */
    if (inoff>=0 && inoff<(free))           /* If start is in free space.. */
    {
        n = minw(len, free);                /* Get max allowable length */
        n1 = minw(n, (WORD)(bp->len - in)); /* Length up to end of buff */
        n2 = n - n1;                        /* Length from start of buff */
        if (n1 && data)                     /* If anything to copy.. */
            memcpy(&bp->data[in], data, n1);/* ..copy up to end of buffer.. */
        if (n2 && data)                     /* ..and maybe also.. */
            memcpy(bp->data, &data[n1], n2);/* ..copy into start of buffer */
    }
    return(n);
}

/* Load data into buffer, return byte count that could be accepted
** If data pointer is null, adjust pointers but don't transfer data */
WORD buff_in(CBUFF *bp, BYTE *data, WORD len)
{
    WORD in, n, n1, n2;

    in = (WORD)bp->in & (bp->len-1);        /* Mask I/P ptr to buffer area */
    n = minw(len, buff_freelen(bp));        /* Get max allowable length */
    n1 = minw(n, (WORD)(bp->len - in));     /* Length up to end of buff */
    n2 = n - n1;                            /* Length from start of buff */
    if (n1 && data)                         /* If anything to copy.. */
        memcpy(&bp->data[in], data, n1);    /* ..copy up to end of buffer.. */
    if (n2 && data)                         /* ..and maybe also.. */
        memcpy(bp->data, &data[n1], n2);    /* ..copy into start of buffer */
    bp->in += n;                            /* Bump I/P pointer */
    return(n);
}

/* Load string into buffer, return num of chars that could be accepted */
WORD buff_instr(CBUFF *bp, char *str)
{
    return(buff_in(bp, (BYTE *)str, (WORD)strlen(str)));
}

/* Load file into buffer, return byte count */
WORD buff_infile(CBUFF *bp, FILE *fp, WORD len)
{
    WORD in, n, n1, n2=0;
    int count=0;

    in = (WORD)bp->in & (bp->len-1);        /* Mask I/P ptr to buffer area */
    n = minw(len, buff_freelen(bp));        /* Get max allowable length */
    n1 = minw(n, (WORD)(bp->len - in));     /* Length up to end of buff */
    if (n1)                                 /* If anything to read.. */
    {                                       /* ..get 1st block from file */
        count = fread(&bp->data[in], 1, n1, fp);
        n2 = len<n1 ? 0 : n-n1;             /* Check for end of file */
    }
    if (n2)                                 /* Maybe also get 2nd block */
        count += fread(bp->data, 1, n2, fp);
    bp->in += count;                        /* Bump I/P pointer */
    return((WORD)count);
}

/* Remove trial data from buffer, return byte count.
** If data pointer is null, adjust pointers but don't transfer data */
WORD buff_try(CBUFF *bp, BYTE *data, WORD maxlen)
{
    WORD trial, n, n1, n2;

    trial = (WORD)bp->trial & (bp->len-1);  /* Mask trial ptr to buffer area */
    n = minw(maxlen, buff_untriedlen(bp));  /* Get max allowable length */
    n1 = minw(n, (WORD)(bp->len - trial));  /* Length up to end of buff */
    n2 = n - n1;                            /* Length from start of buff */
    if (n1 && data)                         /* If anything to copy.. */
        memcpy(data, &bp->data[trial], n1); /* ..copy up to end of buffer.. */
    if (n2 && data)                         /* ..and maybe also.. */
        memcpy(&data[n1], bp->data, n2);    /* ..copy from start of buffer */
    bp->trial += n;                         /* Bump trial pointer */
    return(n);
}

/* Remove data from buffer, return byte count
** If data pointer is null, adjust pointers but don't transfer data */
WORD buff_out(CBUFF *bp, BYTE *data, WORD maxlen)
{
    WORD out, n, n1, n2;

    out = (WORD)bp->out & (bp->len-1);      /* Mask O/P ptr to buffer area */
    n = minw(maxlen, buff_dlen(bp));        /* Get max allowable length */
    n1 = minw(n, (WORD)(bp->len - out));    /* Length up to end of buff */
    n2 = n - n1;                            /* Length from start of buff */
    if (n1 && data)                         /* If anything to copy.. */
        memcpy(data, &bp->data[out], n1);   /* ..copy up to end of buffer.. */
    if (n2 && data)                         /* ..and maybe also.. */
        memcpy(&data[n1], bp->data, n2);    /* ..copy from start of buffer */
    bp->out += n;                           /* Bump O/P pointer */
    if (buff_untriedlen(bp) > buff_dlen(bp))/* ..and maybe trial pointer */
        bp->trial = bp->out;
    return(n);
}
/* Return length of null-delimited string in buffer, 0 if no null terminator */
WORD buff_strlen(CBUFF *bp)
{
    return(buff_chrlen(bp, 0));
}
/* Return length of string in buffer given delimiter char, 0 if no match */
WORD buff_chrlen(CBUFF *bp, char c)
{
    WORD out, n, n1, n2;
    BYTE *p, *q=0;

    out = (WORD)bp->out & (bp->len-1);      /* Mask O/P ptr to buffer area */
    n = buff_dlen(bp);                      /* Get max length */
    n1 = minw(n, (WORD)(bp->len - out));    /* Length up to end of buff */
    n2 = n - n1;                            /* Length from start of buff */
    if (n1)                                 /* Check up to end of buffer */
        q = memchr(p=&bp->data[out], c, n1);
    if (!q && n2)
        q = memchr(p=bp->data, c, n2);      /* ..check data at buffer start */
    else
        n1 = 0;
    return(q ? (WORD)(q - p) + n1 : 0);
}

/* Do TCP-style checksum. Improved algorithm is from RFC 1071 */
WORD csum(void *dp, WORD count)
{
    register LWORD total=0L;
    register WORD n, *p, carries;

    n = count / 2;
    p = (WORD *)dp;
    while (n--)
        total += *p++;
    if (count & 1)
        total += *(BYTE *)p;
    while ((carries=(WORD)(total>>16))!=0)
        total = (total & 0xffffL) + carries;
    return((WORD)total);
}

/* Safe versions of the min() & max() macros for use on re-entrant code
** Ensures that any function arguments aren't called twice */
WORD minw(WORD a, WORD b)
{
    return(a<b ? a : b);
}
WORD maxw(WORD a, WORD b)
{
    return(a>b ? a : b);
}
int mini(int a, int b)
{
    return(a<b ? a : b);
}
int maxi(int a, int b)
{
    return(a>b ? a : b);
}

/* Return byte-swapped word */
WORD swapw(WORD w)
{
    return(((w<<8)&0xff00) | ((w>>8)&0x00ff));
}
/* Return byte-swapped longword */
LWORD swapl(LWORD lw)
{
    return(((lw<<24)&0xff000000L) | ((lw<<8 )&0x00ff0000L) |
           ((lw>>8 )&0x0000ff00L) | ((lw>>24)&0x000000ffL));
}

/* Check for timeout on a given tick counter, return non-zero if true */
int timeout(WORD *timep, int sec)
{

    WORD tim, diff;
    int tout=0;

    tim = (WORD)time(0);
    diff = tim - *timep;
    if (sec==0 || diff>=sec)
    {
        *timep = tim;
        tout = 1;
    }
    return(tout);
}

/* Check for timeout on a given tick counter, return non-zero if true */
int mstimeout(LWORD *timep, int msec)
{

    LWORD tim;
    long diff;
    int tout=0;

    tim = mstime();
    diff = tim - *timep;
    if (msec==0 || diff>=msec)
    {
        *timep = tim;
        tout = 1;
    }
    return(tout);
}

#ifndef WIN32
/* Return approximate millisecond count (DOS only) */
LWORD mstime(void)
{
    return(biostime(0, 0) * 55L);   /* Should be 54.945! */
}
#endif

/* Crude delay in case delay() isn't in the C library
** Derives timing from I/O cycles accessing the interrupt controller
** Slow CPUs (sub-100MHz) will be significantly slower than the given time */
void msdelay(WORD millisec)
{
    int n;

    while (millisec--)
    {
        for (n=0; n<1500; n++)
            inp(0x61);
    }
}

/* Print a hex dump of a buffer */
void hexdump(BYTE *buff, WORD len)
{
    BYTE c, str[17];
    WORD j, n=0;
    while (n < len)                /* For each line of 16 bytes... */
    {
        printf("  %04x:", n);
        for (j=0; j<16; j++)                /* For each byte of 16... */
        {
            printf("%c", j==8 ? '-':' ');   /* Put '-' after 8 bytes */
            if (n++ >= len)                 /* If no bytes left... */
            {
                printf("  ");               /* Fill out space */
                str[j] = 0;
            }
            else                            /* If bytes left... */
            {
                printf("%02x", c = *buff++);/* Print byte value */
                str[j] = c>=' '&&c<='~' ? c : '.';
            }                               /* Save char if valid */
        }
        str[j] = 0;                        /* Print char string */
        printf("  %s\n", str);
    }
}

/* Directory 'findfirst' for both DOS and Win32; returns string, or null */
char *find_first(char *path)
{
#if WIN32
    if (dir_handle != -1L)
        _findclose(dir_handle);
    return((dir_handle=_findfirst(path, &dir_block))!=-1L ? dir_block.name : 0);
#else
    return(findfirst(path, &dir_block, 0)==0 ? dir_block.ff_name : 0);
#endif
}

/* Directory 'findnext' for both DOS and Win32; returns string, or null */
char *find_next(void)
{
#if WIN32
    char *s=0;
    if (_findnext(dir_handle, &dir_block)==0)
        s = dir_block.name;
    else
    {
        _findclose(dir_handle);
        dir_handle = -1L;
    }
    return(s);
#else
    return(findnext(&dir_block)==0 ? dir_block.ff_name : 0);
#endif
}

/* Return the length of a file that has been found */
long find_filesize(void)
{
#if WIN32
    return(dir_block.size);
#else
    return(dir_block.ff_fsize);
#endif
}
/* EOF */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品免费观看| 欧美大片拔萝卜| 成人av在线观| 国产成人8x视频一区二区| 国产91在线观看| 成人在线综合网站| 成人精品在线视频观看| av欧美精品.com| 99精品黄色片免费大全| 色综合久久久网| 欧美色图免费看| 制服丝袜亚洲网站| 日韩精品一区二区三区在线播放 | 国产精品911| 国产.欧美.日韩| 色综合色综合色综合| 欧美色国产精品| 日韩午夜激情电影| 国产无一区二区| 自拍偷拍国产亚洲| 性感美女极品91精品| 日韩 欧美一区二区三区| 久久精品99国产国产精| 国产91露脸合集magnet| 一本色道久久加勒比精品| 8x福利精品第一导航| 欧美成人a∨高清免费观看| 久久亚区不卡日本| 成人欧美一区二区三区视频网页| 亚洲精品菠萝久久久久久久| 亚洲国产精品久久艾草纯爱| 欧美aⅴ一区二区三区视频| 韩国视频一区二区| 成人免费视频视频在线观看免费| 一本久久综合亚洲鲁鲁五月天| 欧美高清视频一二三区 | 精品国产精品网麻豆系列| 国产欧美一区二区精品性| 亚洲三级免费观看| 日韩成人伦理电影在线观看| 国产麻豆视频精品| 色哟哟在线观看一区二区三区| 3d动漫精品啪啪一区二区竹菊 | 亚洲精品成人悠悠色影视| 日日夜夜一区二区| 国产成人免费av在线| 欧洲精品中文字幕| 久久综合中文字幕| 一区二区三区资源| 久久av老司机精品网站导航| 91在线视频播放地址| 欧美一区二区三区精品| 亚洲欧洲av色图| 看片网站欧美日韩| 色88888久久久久久影院野外| 欧美成人精精品一区二区频| 亚洲色图一区二区| 国产在线麻豆精品观看| 在线观看亚洲精品视频| 久久久精品免费免费| 首页亚洲欧美制服丝腿| 成人av电影观看| 亚洲精品一区在线观看| 午夜视频久久久久久| 99精品久久久久久| 久久精品综合网| 蜜臀av性久久久久蜜臀av麻豆| 91蝌蚪国产九色| 国产亚洲美州欧州综合国| 日本人妖一区二区| 欧美亚洲高清一区二区三区不卡| 中文字幕不卡的av| 激情综合一区二区三区| 欧美日韩国产色站一区二区三区| 国产精品久久久久久久久久免费看| 美女一区二区三区| 欧美日韩国产精品成人| 亚洲图片欧美激情| 成人av电影在线观看| 久久欧美中文字幕| 欧美专区日韩专区| 亚洲欧洲性图库| 国产v日产∨综合v精品视频| 日韩欧美国产精品| 免费观看91视频大全| 欧美夫妻性生活| 亚洲国产精品久久久久秋霞影院 | 日韩欧美中文一区| 亚洲sss视频在线视频| 91视频精品在这里| 亚洲欧洲99久久| 国产91精品一区二区麻豆亚洲| 久久久精品蜜桃| 国产精品一二三| www欧美成人18+| 国产一区二区三区国产| 欧美v亚洲v综合ⅴ国产v| 免费人成网站在线观看欧美高清| 欧美福利视频导航| 日韩av中文字幕一区二区三区| 欧美精品视频www在线观看 | 国产一区二区电影| 欧美精品一区二区久久婷婷| 美腿丝袜在线亚洲一区| 欧美一区二区视频网站| 日本成人中文字幕| 日韩欧美一级二级三级久久久| 免费美女久久99| 欧美电影免费观看高清完整版在 | 91在线观看成人| 亚洲欧洲日产国码二区| 91在线码无精品| 一区二区三区四区视频精品免费| 91久久线看在观草草青青| 一级精品视频在线观看宜春院| 在线观看亚洲a| 日韩av中文字幕一区二区| 精品免费一区二区三区| 国产精品1区二区.| 国产精品每日更新在线播放网址| hitomi一区二区三区精品| 亚洲欧美激情一区二区| 欧美日韩一区中文字幕| 蜜桃av一区二区在线观看| 久久久精品免费网站| 91论坛在线播放| 调教+趴+乳夹+国产+精品| 精品捆绑美女sm三区| a在线播放不卡| 亚洲一区日韩精品中文字幕| 日韩欧美色综合网站| 国产91精品露脸国语对白| 亚洲精品国产一区二区三区四区在线| 欧美性受xxxx| 国产在线一区二区| 亚洲欧美在线另类| 欧美精品亚洲一区二区在线播放| 激情久久久久久久久久久久久久久久| 中文子幕无线码一区tr| 精品视频1区2区| 国产一区二区三区久久久| 成人免费一区二区三区在线观看| 欧美日韩国产一级| 国产成人免费av在线| 亚洲成人av一区二区三区| 久久久亚洲精华液精华液精华液| 色综合夜色一区| 蜜桃视频免费观看一区| 欧美国产丝袜视频| 欧美日韩不卡一区二区| 成人一区二区三区中文字幕| 亚洲成av人影院| 久久午夜老司机| 色吊一区二区三区| 精品一区二区日韩| 一区二区免费在线播放| 2021国产精品久久精品 | 亚洲欧美日韩国产手机在线| 欧美草草影院在线视频| 91麻豆国产自产在线观看| 另类的小说在线视频另类成人小视频在线| 国产精品三级视频| 欧美一级理论片| 91精彩视频在线观看| 国产激情一区二区三区四区 | 99这里只有久久精品视频| 日本不卡高清视频| 亚洲免费观看在线视频| 久久奇米777| 欧美一级日韩免费不卡| 色哟哟一区二区三区| 国产白丝精品91爽爽久久| 蜜臀va亚洲va欧美va天堂| 国产精品第一页第二页第三页| 欧美zozozo| 日韩写真欧美这视频| 欧美午夜精品电影| 97精品国产露脸对白| 国产精品一二三区在线| 日韩国产欧美在线观看| 亚洲激情六月丁香| 中文字幕欧美一| 中文字幕不卡的av| 国产日韩综合av| 久久久美女毛片| 日韩一区二区在线免费观看| 欧美日韩在线精品一区二区三区激情| av中文字幕不卡| 成人一区二区三区| 国产在线播放一区三区四| 久久精品国产99| 日本特黄久久久高潮| 一区二区三区精品视频在线| 中文久久乱码一区二区| 久久精品亚洲精品国产欧美| 日韩欧美在线不卡| 欧美一区二区福利在线| 91精品国产综合久久久久久漫画 | 久久久久久久久岛国免费| 精品乱人伦小说|