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

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

?? gbit.c

?? <Win2k系統編程>源碼.次數為國人自編,內容豐富,還是不錯的.
?? C
字號:


/****************************** Module Header *******************************
* Module Name: GBIT.C
*
* Bitmap allocation routines to manage a bit-mapped free list, and find
* free sections.
*
* Functions:
*
* gbit_set()
* gbit_init()
* gbit_alloc()
* gbit_free()
* gbit_findfree()
*
* Comments:
*
* Each map is an array of unsigned longs where bit 0 of the first 
* long represents block 1.
*
****************************************************************************/

#include <windows.h>
#include "gutils.h"


BOOL gbit_set(DWORD FAR * map, long blknr, long nblks, BOOL op_set);

/***************************************************************************
 * Function: gbit_init
 *
 * Purpose:
 *
 * Initialise a pre-allocated map of ulongs to represent a free
 * area of nblks
 */
void APIENTRY
gbit_init(DWORD FAR * map, long nblks)
{
        long i;
        long leftover = nblks % 32;
        long blks = nblks / 32;
        DWORD last = 0;

        for (i=0; i < blks; i++) {
                map[i] = 0xffffffff;
        }
        for (i = 0; i < leftover; i++) {
                last = (last << 1) | 1;
        }
        if(leftover)
                map[blks] = last;
}

/***************************************************************************
 * Function: gbit_alloc
 *
 * Purpose:
 *
 * Mark a region starting at blknr for nblks, as busy (ie 0) 
 */
BOOL APIENTRY
gbit_alloc(DWORD FAR * map, long blknr, long nblks)
{
        return(gbit_set(map, blknr, nblks, FALSE));
}


/***************************************************************************
 * Function: gbit_set
 *
 * Purpose:
 *
 * Mark region - if op_set, to 1s, otherwise to 0s 
 */
BOOL
gbit_set(DWORD FAR * map, long blknr, long nblks, BOOL op_set)
{
        long first;
        long last;
        long fullwords;
        long startbit, startword;
        long i;
        DWORD dword = 0;

        blknr--;
        first = min(32 - (blknr % 32), nblks);
        nblks -= first;
        last = nblks % 32;
        fullwords = (nblks - last) / 32;
        
        startword = blknr / 32;
        startbit = blknr % 32;
        for (i = 0; i < first; i++) {
                dword = (dword << 1) | 1;
        }
        dword <<= startbit;
        if (op_set) {
                map[startword] |= dword;
                dword = 0xffffffff;
        } else {
                map[startword] &= ~dword;
                dword = 0;
        }
        startword++;
        for (i = 0; i < fullwords; i++) {
                map[startword+i] = dword;
        }
        startword += fullwords;
        for(i = 0, dword = 0; i < last; i++) {
                dword = (dword << 1) | 1;
        }
        if (last) {
                if (op_set) {
                        map[startword] |= dword;
                } else {
                        map[startword] &= ~dword;
                }
        }

        return(TRUE);
}

/***************************************************************************
 * Function: gbit_free
 *
 * Purpose:
 *
 * Mark region of nblks starting at blknr to 0s - ie not busy 
 */
BOOL APIENTRY
gbit_free(DWORD FAR * map, long blknr, long nblks)
{
        return(gbit_set(map, blknr, nblks, TRUE));
}


/***************************************************************************
 * Function: gbit_findfree
 *
 * Purpose:
 *
 * Find a free segment (ie contiguous sequence of 1s) of nblks in length.
 * If not found, find longest sequence. Store address of segment in *blknr.
 *
 * Return value is nr of blks in sequence found. Region is *not* marked busy.
 */
long APIENTRY
gbit_findfree(DWORD FAR* map, long nblks, long mapsize, long FAR * blknr)
{
        long curblk, startblk, len, i;
        long startbit, nfull, nlast, nbitsleft;
        DWORD mask;
        long mapblks = (mapsize + 31) / 32;
        long aubegin = 0, aulen = 0;
        long curbit = 0;

        /* main loop looking at segments */
        for (curblk = 0; curblk < mapblks; ) {
loop:
                /* loop finding first 1 */
                for (; curblk < mapblks; curblk++, curbit = 0) {
                        if (map[curblk] > 0) {
                                break;
                        }
                }
                if (curblk >= mapblks) 
                        break;
                
                /* find first 1 in this long */
                startblk = curblk;
                for (mask = 1, i = 0; i < curbit; i++) {
                        mask <<= 1;
                }
                for(; curbit < 32; curbit++, mask <<= 1) {
                        if (map[curblk] & mask) {
                                break;
                        }
                } 
                if (curbit >= 32) {
                        /* abandon this word - start again with next word */
                        curblk++;
                        curbit = 0;
                        goto loop;
                }

                /* we've now found a 1 - calc remaining
                 * bits in this word, complete words etc required.
                 */
                startbit = curbit;
                nbitsleft = min( (32 - curbit), nblks);
                nfull = (nblks - nbitsleft) / 32;
                nlast = (nblks - nbitsleft) % 32;

                /* check for required sequence within this word */

                for (i = 0; i < nbitsleft; i++, curbit++, mask <<= 1) {
                        if ((map[curblk] & mask) == 0) {
                                /* abandon and start again - start
                                 * next pass at curbit in same word
                                 */
                                /* store free region if longest yet */
                                if (i > aulen) {
                                        aulen = i;
                                        aubegin = curblk * 32 + startbit +1;
                                }
                                goto loop;
                        }
                }
                
                /* check for nfull full words */
                for (curblk++; curblk <= startblk + nfull; curblk++) {
                        if (curblk >= mapblks) {
                                /* end of map - abandon here and exit at top
                                 * of loop
                                 */
                                len = nbitsleft +
                                        ((curblk - (startblk + 1)) * 32);
                                if (len > aulen) {
                                        aubegin = startblk * 32 + startbit + 1;
                                        aulen = len;
                                }
                                goto loop;
                        }
                        if (map[curblk] != 0xffffffff) {
                                /* not a full word - start again at this bit */
                                len = 0;
                                curbit = 0;
                                for (mask = 1; mask & map[curblk]; mask <<= 1) {
                                        len++;
                                        curbit++;
                                }
                                len += nbitsleft +
                                        (curblk - (startblk+ 1)) * 32;
                                if (len > aulen) {
                                        aulen = len;
                                        aubegin = startblk * 32 + startbit + 1;
                                }
                                /* continue with current blk, bit */
                                goto loop;
                        }
                }

                /* left-over bits required in last word */
                mask = 1;
                for (curbit = 0; curbit < nlast;  curbit++, mask <<= 1) {
                        if ((map[curblk] & mask) == 0) {
                                len = nbitsleft + (nfull * 32);
                                len += curbit;
                                if (len > aulen) {
                                        aulen = len;
                                        aubegin = startblk * 32 + startbit + 1;
                                }
                                goto loop;
                        }
                }
                /* ok - found a block big enough! */
                aubegin = startblk * 32 + startbit + 1;
                *blknr = aubegin;
                return(nblks);
        }

        /* end of map - return longest sequence */
        *blknr = aubegin;
        return(aulen);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线成人免费视频| 亚洲女人****多毛耸耸8| 日本一区二区成人| 五月婷婷色综合| 成人动漫中文字幕| 91麻豆精品国产无毒不卡在线观看| 欧美电影免费观看高清完整版在| 99精品热视频| 精品久久久久久久久久久久包黑料 | 久久99久久久欧美国产| 91伊人久久大香线蕉| 精品sm在线观看| 日日嗨av一区二区三区四区| 99久久99久久精品免费观看| 久久综合色播五月| 男人的天堂久久精品| 欧美揉bbbbb揉bbbbb| 欧美国产日本韩| 国产黄色精品视频| wwww国产精品欧美| 久久99精品国产.久久久久久| 欧美a级理论片| 69久久99精品久久久久婷婷| 亚洲午夜久久久久久久久电影网| 亚洲一区二区av电影| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美一区二区三区系列电影| 18成人在线观看| 欧美日韩1区2区| 亚洲一区二区三区中文字幕| 欧美中文字幕久久 | 成人app在线观看| 久久久99精品免费观看不卡| 开心九九激情九九欧美日韩精美视频电影| 免费一区二区视频| 5月丁香婷婷综合| 丝瓜av网站精品一区二区 | 五月综合激情日本mⅴ| 色综合久久综合网欧美综合网| 欧美剧情电影在线观看完整版免费励志电影| 欧美日韩成人一区二区| 五月天亚洲精品| 91精品国产麻豆| 精一区二区三区| 日本一区二区电影| 成人国产精品视频| 亚洲乱码国产乱码精品精的特点 | 91视频在线观看| 亚洲精品午夜久久久| 91福利社在线观看| 天天免费综合色| 精品国产露脸精彩对白| av在线这里只有精品| 亚洲欧美成人一区二区三区| 欧美视频在线观看一区二区| 日本亚洲天堂网| 久久久国产精品不卡| 91精品婷婷国产综合久久性色 | 成人永久免费视频| 亚洲女同ⅹxx女同tv| 91精品在线一区二区| 国产成人99久久亚洲综合精品| 欧美日韩不卡在线| 国产一区二区三区免费观看| 中文字幕乱码亚洲精品一区| 欧美自拍偷拍一区| 狂野欧美性猛交blacked| 国产精品久久三区| 69堂精品视频| 成人久久视频在线观看| 亚洲成av人综合在线观看| 亚洲精品一区二区三区福利| 色噜噜狠狠色综合中国| 久久99精品久久久久| 一区二区不卡在线播放 | 亚洲精品视频观看| 日韩美一区二区三区| av网站免费线看精品| 日本不卡一二三| 亚洲免费观看视频| 7777精品伊人久久久大香线蕉超级流畅 | 国产麻豆9l精品三级站| 一级特黄大欧美久久久| 精品福利av导航| 欧美艳星brazzers| 国产曰批免费观看久久久| 一区二区高清在线| 欧美国产日韩a欧美在线观看| 国产福利一区在线观看| 午夜亚洲福利老司机| 亚洲欧洲精品天堂一级| 777奇米四色成人影色区| 99天天综合性| 国产精品99久久久久久宅男| 男男视频亚洲欧美| 亚洲国产精品久久艾草纯爱 | 97久久久精品综合88久久| 精品一区二区久久久| 午夜精品久久一牛影视| 亚洲欧美日韩精品久久久久| 国产日韩在线不卡| 久久综合中文字幕| 日韩精品一区二区三区蜜臀 | 久久久99精品免费观看| 国产精品你懂的| 久久色在线观看| 精品国产三级电影在线观看| 91精品国产91综合久久蜜臀| 欧美伦理电影网| 欧美日韩aaaaaa| 欧美二区三区的天堂| 欧美精品久久久久久久久老牛影院| 日韩高清一区二区| 香蕉av福利精品导航| 亚洲午夜精品网| 一区二区成人在线视频| 亚洲自拍欧美精品| 亚洲国产一二三| 亚洲18影院在线观看| 亚洲国产精品影院| 一个色妞综合视频在线观看| 一区二区三区在线视频免费| 亚洲精品va在线观看| 亚洲一区视频在线| 视频在线观看一区| 久久电影网电视剧免费观看| 激情综合亚洲精品| 国产白丝精品91爽爽久久| 国产成人啪午夜精品网站男同| 亚洲电影视频在线| 免费在线观看一区二区三区| 精品一区二区三区久久久| 成人精品国产一区二区4080| 成人黄色网址在线观看| 色老汉一区二区三区| 在线不卡一区二区| 国产色产综合产在线视频| 中文字幕一区在线| 天堂蜜桃91精品| 国产酒店精品激情| 91高清视频在线| 欧美电视剧免费全集观看| 日本一二三不卡| 亚洲高清久久久| 国内精品伊人久久久久影院对白| 亚洲国产成人精品视频| 日本系列欧美系列| 成人永久免费视频| 久久久久国产精品麻豆ai换脸| 欧美视频三区在线播放| 日韩女优毛片在线| ...中文天堂在线一区| 五月婷婷另类国产| 成人av资源网站| 51精品秘密在线观看| 国产日产亚洲精品系列| 亚洲大片在线观看| 国产另类ts人妖一区二区| 欧美主播一区二区三区美女| 337p日本欧洲亚洲大胆色噜噜| 欧美日韩免费电影| 日本一区二区视频在线观看| 亚洲风情在线资源站| 懂色av中文字幕一区二区三区| 久久精品国内一区二区三区| 不卡的电影网站| 精品免费视频.| 亚洲第一久久影院| 夫妻av一区二区| 欧美一区二区在线播放| 国产精品欧美极品| 精品影院一区二区久久久| 欧美亚洲愉拍一区二区| 中文字幕乱码日本亚洲一区二区| 国产精品丝袜在线| 精品一区二区影视| 欧美精品乱码久久久久久| 一区在线中文字幕| 国产精品亚洲一区二区三区妖精| 国产高清在线观看免费不卡| 日韩一区二区三区电影| 国产大陆亚洲精品国产| 欧美一区二区三区免费大片 | 成人黄色电影在线| 精品少妇一区二区三区在线视频| 日韩欧美一级精品久久| 午夜精品久久久久久久| 欧美亚洲国产一区二区三区va| 69久久99精品久久久久婷婷 | 在线观看中文字幕不卡| 中文字幕一区二区不卡| 国产成人av自拍| 国产亚洲一区二区三区在线观看| 国产精品色噜噜| 国产精品一区专区| 久久亚洲综合av| 国产馆精品极品| 久久久国产精品午夜一区ai换脸| 亚洲女女做受ⅹxx高潮| 日本高清视频一区二区|