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

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

?? netutil.c

?? 立宇泰44B0所有測試源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
    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 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩久久免费av| 久久久精品国产免大香伊| 日韩精品一区二区三区在线播放 | 亚洲综合免费观看高清完整版在线 | 午夜精品久久久久久久久久久| 久久99精品国产麻豆不卡| 色婷婷久久综合| 欧美激情综合网| 久久精品99国产国产精| 在线视频中文字幕一区二区| 欧美极品aⅴ影院| 精品一区二区在线免费观看| 欧美日韩免费一区二区三区 | 亚洲午夜一区二区三区| 风间由美一区二区三区在线观看 | 欧美亚洲另类激情小说| 亚洲丝袜美腿综合| 成人一区二区视频| 日韩一级二级三级| 性感美女久久精品| 精品视频一区二区三区免费| 悠悠色在线精品| 99精品久久只有精品| 国产视频一区在线观看| 激情欧美日韩一区二区| 欧美α欧美αv大片| 琪琪一区二区三区| 欧美一区二区三区思思人| 天使萌一区二区三区免费观看| 在线免费不卡视频| 亚洲最快最全在线视频| 91天堂素人约啪| 一区二区三区在线影院| 欧美色综合天天久久综合精品| 一级日本不卡的影视| 欧美亚洲精品一区| 天堂va蜜桃一区二区三区| 91精品国产综合久久精品图片| 亚洲成人一区在线| 日韩一区二区免费视频| 麻豆成人久久精品二区三区红| 精品成人佐山爱一区二区| 国产成人精品影视| 国产精品精品国产色婷婷| 91久久香蕉国产日韩欧美9色| 亚洲一区二区综合| 欧美一区二区三区免费大片| 国产一区在线看| 国产精品久久午夜夜伦鲁鲁| 色狠狠av一区二区三区| 视频一区二区欧美| 久久久久国产一区二区三区四区| 成人精品国产一区二区4080| 一区二区在线免费观看| 在线电影国产精品| 国产乱一区二区| 一区二区三区中文字幕精品精品| 欧美人伦禁忌dvd放荡欲情| 美女一区二区视频| 中文字幕一区二区三区蜜月| 欧美三级电影网站| 麻豆精品国产传媒mv男同| 国产精品免费视频观看| 欧美精品色一区二区三区| 国产一区二区三区在线观看免费 | 国产性色一区二区| 欧美综合天天夜夜久久| 麻豆视频观看网址久久| 国产精品久久久久久久裸模| 欧美一区二区三区在线看| 成人免费看视频| 日韩成人免费电影| 一区视频在线播放| 日韩欧美中文字幕公布| 不卡一区在线观看| 久久精品二区亚洲w码| 一二三区精品视频| 国产人成亚洲第一网站在线播放| 欧亚一区二区三区| 不卡视频一二三四| 黄色小说综合网站| 亚洲高清免费在线| 亚洲三级在线看| 国产网站一区二区三区| 欧美精品欧美精品系列| 色综合夜色一区| 国产盗摄女厕一区二区三区 | 国产成人午夜视频| 日韩 欧美一区二区三区| 亚洲欧美日韩久久精品| 国产亚洲精品免费| 精品sm捆绑视频| 欧美一区二区三区在| 在线免费一区三区| 一本色道久久综合亚洲91| 懂色一区二区三区免费观看| 久久99这里只有精品| 琪琪一区二区三区| 日韩精品每日更新| 亚洲国产精品久久久男人的天堂 | 国产精品免费网站在线观看| 精品国产百合女同互慰| 欧美一卡2卡3卡4卡| 欧美人与性动xxxx| 欧美精品在线观看一区二区| 欧美手机在线视频| 欧美视频中文字幕| 欧美日韩视频专区在线播放| 欧美性猛片aaaaaaa做受| 日本道免费精品一区二区三区| 99久久精品国产一区| 99视频精品免费视频| 99久久精品免费| 色先锋aa成人| 欧美在线观看禁18| 欧美日韩视频第一区| 欧美精品777| 欧美一区午夜精品| 欧美大胆一级视频| 久久久久久久久久看片| 欧美激情一区二区三区蜜桃视频| 欧美极品另类videosde| 亚洲欧美综合网| 亚洲一区二区不卡免费| 视频一区二区不卡| 激情综合色播激情啊| 国产一区欧美二区| 99久久久精品免费观看国产蜜| 日本高清不卡一区| 91精品婷婷国产综合久久竹菊| 日韩美一区二区三区| 久久久一区二区三区| 中文字幕一区视频| 午夜电影网亚洲视频| 久久国产精品区| av资源网一区| 欧美日韩在线免费视频| 精品99一区二区| 亚洲欧美一区二区三区孕妇| 亚洲国产精品一区二区久久 | 91丨porny丨国产| 欧美剧在线免费观看网站| 26uuu亚洲综合色| 中文字幕五月欧美| 图片区小说区区亚洲影院| 国产美女av一区二区三区| 成人动漫一区二区三区| 欧美精品乱码久久久久久| 久久奇米777| 亚洲福中文字幕伊人影院| 国产精品亚洲视频| 欧美日韩国产一级二级| 国产日韩亚洲欧美综合| 亚洲一区二区三区四区不卡| 久久综合综合久久综合| 99精品国产视频| 欧美成人一区二区三区片免费| 日韩一区日韩二区| 黑人巨大精品欧美一区| 日本高清不卡视频| 国产亚洲一二三区| 免费成人av在线播放| 日本道精品一区二区三区| 久久毛片高清国产| 亚洲国产精品人人做人人爽| 成人国产在线观看| 日韩免费在线观看| 午夜免费久久看| 99久久er热在这里只有精品66| 欧美成人精品3d动漫h| 午夜久久久久久久久| 99久久久精品免费观看国产蜜| 精品91自产拍在线观看一区| 亚洲二区在线视频| 成人av在线一区二区| 欧美电影免费观看高清完整版在| 伊人夜夜躁av伊人久久| 波多野结衣精品在线| 国产亚洲自拍一区| 免费成人美女在线观看| 欧美人与z0zoxxxx视频| 一区二区三区精密机械公司| 成人国产精品免费观看动漫| 精品国产三级a在线观看| 日日欢夜夜爽一区| 欧美日韩久久久一区| 亚洲黄网站在线观看| 91视视频在线观看入口直接观看www | 国产精品久久久久四虎| 国产一区二区在线观看免费| 日韩一区二区三区在线| 日精品一区二区| 欧美一区二区三区不卡| 日韩高清不卡一区| 欧美一级一区二区| 免费观看在线色综合| 日韩视频免费观看高清在线视频| 午夜视频一区二区| 日韩午夜在线观看| 国内外成人在线|