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

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

?? mkorzimg.c

?? 可在Intel x86上執行的最小OS,完全用組語撰寫 可做DISK IO,Process Scheduling...等
?? C
字號:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <ctype.h>#include <stdint.h>#ifndef MAX_PATH#define MAX_PATH 4096#endif#if 0#define DEBUG 1#endiftypedef uint8_t BYTE;typedef uint16_t WORD;typedef uint32_t DWORD;#define IMG_SIZE 1474560BYTE img[IMG_SIZE];BYTE secBuf[512];static void throwError(char *message){	printf("Error: %s\n", message);	exit(0);}static void readImage(char *imgName){	FILE *fp;	if ((fp = fopen(imgName, "rb")) == NULL)		throwError("Can't read image file");	fread(img, 1, IMG_SIZE, fp);	fclose(fp);}static void writeImage(char *imgName){	FILE *fp;	if ((fp = fopen(imgName, "wb")) == NULL)		throwError("Can't write image file");	fwrite(img, 1, IMG_SIZE, fp);	fclose(fp);}static void putBYTE(int addr, BYTE val){	if (addr < 0 || addr >= IMG_SIZE)		return;	img[addr] = val;}static void putWORD(int addr, WORD val){	if (addr < 0 || (addr + 1) >= IMG_SIZE)		return;	img[addr + 0] = (BYTE)(val & 0x00FF);	img[addr + 1] = (BYTE)(val >> 8);}static void putDWORD(int addr, DWORD val){	if (addr < 0 || (addr + 3) >= IMG_SIZE)		return;	img[addr + 0] = (BYTE)  (val & 0x000000FF);	img[addr + 1] = (BYTE) ((val & 0x0000FF00) >> 8);	img[addr + 2] = (BYTE) ((val & 0x00FF0000) >> 16);	img[addr + 3] = (BYTE)  (val >> 24);}static BYTE getBYTE(int addr){	if (addr < 0 || addr >= IMG_SIZE)		return 0;	return img[addr];}static WORD getWORD(int addr){	if (addr < 0 || (addr + 1 ) >= IMG_SIZE)		return 0;	return ((WORD) img[addr] | (((WORD) img[addr + 1]) << 8));}static DWORD getDWORD(int addr){	if (addr < 0 || (addr + 1) >= IMG_SIZE)		return 0;	return (  (DWORD) img[addr + 0] |		(((DWORD) img[addr + 1])<< 8) |		(((DWORD) img[addr + 2])<< 16) |		(((DWORD) img[addr + 3])<< 24));}static void zeroImage(void){	memset(img, 0, IMG_SIZE);}static void readBootSec(char *bsecName){	FILE *fp;	if ((fp = fopen(bsecName, "rb")) == NULL)		throwError("Can't read boot sector file");	fread(img, 1, 512, fp);	fclose(fp);}static void putString(int addr, char *str){	int i;	for (i = 0; i < strlen(str); i++)		putBYTE(addr + i, str[i]);}static void putFAT_Element(int fatAddr, int num, int val){	int addr;	addr = fatAddr + num * 3 / 2;	if (num & 1) {		putWORD(addr, (getWORD(addr) & 0x000F) | (val << 4));	}	else {		putWORD(addr, (getWORD(addr) & 0xF000) | val);	}}static int getFAT_Element(int fatAddr, int num){	int addr;	addr = fatAddr + num * 3 / 2;	if (num & 1) {		return (getWORD(addr) >> 4);	}	return (getWORD(addr) & 0x0FFF);}static void initImage(char *bsecName, char *imgName){	int bps, eoc;	int fatStart, fat2Start, rootStart, secPerRoot, dataStart;	int fatAddr;	printf("Initializing image ...\n");	zeroImage();	readBootSec(bsecName);	putString(0x03, "OrzKernl");	/* BS_OEMName */	putWORD(0x0B, 512);		/* BPB_BytesPerSec */	putBYTE(0x0D, 1);		/* BPB_SecPerClust */	putWORD(0x0E, 1);		/* BPB_RsvdSecCnt */	putBYTE(0x10, 2);		/* BPB_NumFATs */	putWORD(0x11, 0xE0);		/* BPB_RootEntCnt */	putWORD(0x13, 0x0B40);		/* BPB_TotSec16 */	putBYTE(0x15, 0xF0);		/* BPB_Media */	putWORD(0x16, 9);		/* BPB_FATSz16 */	putWORD(0x18, 18);		/* BPB_SecPerTrk */	putWORD(0x1A, 2);		/* BPB_NumHeads */	putDWORD(0x1C, 0);		/* BPB_HiddSec */	putDWORD(0x20, 0);		/* BPB_TotSec32 */	putBYTE(0x24, 0);		/* BS_DrvNum */	putBYTE(0x25, 0);		/* BS_Reserved1 */	putBYTE(0x26, 0x29);		/* BS_BootSig */	putDWORD(0x27, 0x00162244);	/* BS_VolID */	putString(0x2B, "Orz Disk   ");	/* BS_VolLab */	putString(0x36, "FAT12   ");	/* BS_FilSysType */	putWORD(0x01FE, 0xAA55);	/* End */	bps = getWORD(0x0B);	/* bytesPerSec */	eoc = 0xFFF;		/* end of cluster-chain */	/* fatStart = hiddenSectors + resSectors */	fatStart = getDWORD(0x1C) + getWORD(0x0E);	/* fat2Start = fatStart + secPerFAT */	fat2Start = fatStart + (int) getWORD(0x16);	/* rootStart = fatCopies * sectPerFAT + fatStart */	rootStart = (int) getBYTE(0x10) * (int) getWORD(0x16) + fatStart;	/* secPerRoot = rootEntCnt * 32 / bytesPerSec */	secPerRoot = (int) getWORD(0x11) * 32 / bps;	/* dataStart = rootStart + secPerRoot */	dataStart = rootStart + secPerRoot;#ifdef DEBUG	printf("DBG: rootStart=0x%04X, secPerRoot=0x%04X, dataStart=0x%04X\n",		rootStart, secPerRoot, dataStart);#endif	fatAddr = fatStart * bps;	putFAT_Element(fatAddr, 0, 0xFF8);	putFAT_Element(fatAddr, 1, eoc);	writeImage(imgName);}static void imageInfo(char *imgName){	int i;	int bps, eoc;	int fatStart, fat2Start, rootStart, secPerRoot, dataStart;	int fatAddr;	printf("Image Info...\n");	readImage(imgName);	bps = getWORD(0x0B);	/* bytesPerSec */	eoc = 0xFFF;		/* end of clusterchain */	/* fatStart = hiddenSectors + resSectors */	fatStart = getDWORD(0x1C) + getWORD(0x0E);	/* fat2Start = fatStart + secPerFAT */	fat2Start = fatStart + (int) getWORD(0x16);	/* rootStart = fatCopies * sectPerFAT + fatStart */	rootStart = (int) getBYTE(0x10) * (int) getWORD(0x16) + fatStart;	/* secPerRoot = rootEntCnt * 32 / bytesPerSec */	secPerRoot = (int) getWORD(0x11) * 32 / bps;	/* dataStart = rootStart + secPerRoot */	dataStart = rootStart + secPerRoot;	fatAddr = fatStart * bps;	for (i = 0; i < 64; i++) {		if (i > 0)			printf(" ");		printf("%03X", getFAT_Element(fatAddr, i));	}	printf("\n");}static long getFileSize(char *fName){	FILE *fp;	long fsize;	if ((fp = fopen(fName, "rb")) == NULL)		throwError("Error opening file");	fseek(fp, 0, SEEK_END);	fsize = ftell(fp);	fclose(fp);	return fsize;}static int getFreeFAT_Element(int fatAddr, int clustCnt){	int i;	for (i = 2; i < clustCnt; i++) {		if (getFAT_Element(fatAddr, i) == 0)			return i;	}	return -1;}static WORD getTime(struct tm *tme){	return ((tme->tm_hour << 11) |		(tme->tm_min << 5) |		(tme->tm_sec / 2));}static WORD getDate(struct tm *tme){	return (((tme->tm_year - 80) << 9) |		 (tme->tm_mon << 5) |		(tme->tm_mday));}static int findFile(int rootAddr, int rootEnt, BYTE *fName){	int i, j, addr;	for (i = 0, addr = rootAddr; i < rootEnt; i++, addr += 32) {		for (j = 0; j < 11; j++) {			if (getBYTE(addr + j) != fName[j])				break;		}		if (j >= 11)			return i;	}	return -1;}static void writeBufToCluster(int dataAddr, int clustSize, int clust){	int i, addr;	addr = dataAddr + (clust - 2) * clustSize;	for (i = 0; i < sizeof(secBuf); i++)		putBYTE(addr + i, secBuf[i]);}static void copyFAT(int fat1, int fat2, int cnt){	int i;	for (i = 0; i < cnt; i++)		putFAT_Element(fat2, i, getFAT_Element(fat1, i));}static void addFile(char *fName, char *fiName, char *imgName){	int i, j, ex, addr, fsize, clust, sz, nclust;	int bps, eoc, rootEnt, clustCnt;	int fatStart, fat2Start, rootStart, secPerRoot, dataStart;	int fatAddr, rootAddr, sectPerClust;	BYTE resName[11];	struct tm *tme;	time_t tmt;	FILE *fp;	printf("Adding file ...");	fsize = getFileSize(fName);	readImage(imgName);	bps = getWORD(0x0B);	eoc = 0xFFF;	sectPerClust = getBYTE(0x0D);	if (sectPerClust != 1)		throwError("Internal error: addFile works correct only when sectPerCluster==1");	/* clustCnt = totalSectors / sectPerCluster */	clustCnt = (int) getWORD(0x13) / sectPerClust;	rootEnt = getWORD(0x11);	fatStart = getDWORD(0x1C) + getWORD(0x0E);	fat2Start = fatStart + (int) getWORD(0x16);	rootStart = (int) getBYTE(0x10) * (int) getWORD(0x16) + fatStart;	secPerRoot = rootEnt * 32 / bps;	dataStart = rootStart + secPerRoot;	fatAddr = fatStart * bps;	rootAddr = rootStart * bps;#ifdef DEBUG	printf("DBG: rootAddr=0x%04X\n", rootAddr);#endif	for (i = 0, j = 0, ex = 0; i < strlen(fiName) && j < 12; i++, j++) {		if (fiName[i] == '.') {			if (ex)				throwError("Multiple extensions not allowed");			for ( ; j < 8; j++)				resName[j] = ' ';			j--;			ex = 1;		}		else {			if (j >= 8 && ! ex) {				for ( ; i < strlen(fiName) && fiName[i] != '.'; i++);				continue;			}			resName[j] = toupper(fiName[i]);		}	}	for (; j < 12; j++)		resName[j] = ' ';	if (findFile(rootAddr, rootEnt, resName) >= 0)		throwError("File already exists");	for (i = 0, addr = rootAddr; i < rootEnt; i++, addr += 32) {		if (getBYTE(addr) == 0x00 || getBYTE(addr) == 0xE5)			break;	}	if (i >= rootEnt)		throwError("No free root entries");	clust = getFreeFAT_Element(fatAddr, clustCnt);	if (clust < 0)		throwError("No free FAT entry");	tmt = time(NULL);	tme = localtime(&tmt);	memcpy(&img[addr], resName, 11);	// DIR_Name			[ +0 ]	addr += 11;	putBYTE(addr++, 0);			// DIR_Attr			[ +11 ]	putBYTE(addr++, 0);			// DIR_NTRes			[ +12 ]	putBYTE(addr++, 0);			// DIR_CrtTimeTenth (FAT32)	[ +13 ]	putWORD(addr, 0);			// DIR_CrtTime (FAT32)		[ +14 ]	addr += 2;	putWORD(addr, 0);			// DIR_CrtDate (FAT32)		[ +16 ]	addr += 2;	putWORD(addr, 0);			// DIR_LstAccDate (FAT32)	[ +18 ]	addr += 2;	putWORD(addr, 0);			// DIR_FstClasHl (FAT32)	[ +20 ]	addr += 2;	putWORD(addr, getTime(tme));		// DIR_WrtTime			[ +22 ]	addr += 2;	putWORD(addr, getDate(tme));		// DIR_WrtDate			[ +24 ]	addr += 2;	putWORD(addr, clust);			// DIR_FstClusLo		[ +26 ]	addr += 2;	putDWORD(addr, fsize);			// DIR_FileSize			[ +28 ]	if ((fp = fopen(fName, "rb")) == NULL)		throwError("Error reading file");	sz = fsize;	do {		sz -= fread(secBuf, 1, sectPerClust * bps, fp);		writeBufToCluster(dataStart*bps, sectPerClust * bps, clust);		if (sz) {			putFAT_Element(fatAddr, clust, eoc); /* NOTE:				If not set here, getFreeFAT_Element would get				this element instead. */			nclust = getFreeFAT_Element(fatAddr, clustCnt);			if (nclust < 0)				throwError("No free FAT entries to store file");			putFAT_Element(fatAddr, clust, nclust);			clust = nclust;		}		else {			putFAT_Element(fatAddr, clust, eoc);		}	} while (sz);	fclose(fp);	copyFAT(fatAddr, fat2Start * bps, clustCnt);	writeImage(imgName);}static void usage(){	printf("Usage: \n""Init image:\n""\t mkorzimg b bootsec.bin orzmicro.img\n""Add a file into image:\n""\t mkorzimg a filename IMAGE.EXT orzmicro.img\n""Create image information:\n""\t mkorzimg i orzmicro.img\n"	);}int main(int argc, char *argv[]){	if (argc < 2) {		usage();		return 1;	}	if (! strcmp(argv[1], "b")) 		initImage(argv[2], argv[3]);	else if (! strcmp(argv[1], "a"))		addFile(argv[2], argv[3], argv[4]);	else if (! strcmp(argv[1], "i")) 		imageInfo(argv[2]);	else		throwError("Incorrect parameters");	printf("... ok\n");	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲r级在线视频| 欧美成va人片在线观看| 国产成人精品1024| 国产一区在线观看麻豆| 久久99深爱久久99精品| 久久99深爱久久99精品| 韩国一区二区在线观看| 国产精品88888| 国产成人在线观看| 99久久精品国产麻豆演员表| 91麻豆国产福利精品| 欧洲亚洲精品在线| 欧美高清激情brazzers| 欧美一区二区三区电影| 欧美第一区第二区| 久久精品视频一区二区| 中文字幕精品—区二区四季| 成人欧美一区二区三区白人 | 91精品国产品国语在线不卡| 欧美一级精品大片| 久久奇米777| 亚洲日本护士毛茸茸| 夜夜精品浪潮av一区二区三区| 亚洲一区二区美女| 五月激情丁香一区二区三区| 极品少妇xxxx精品少妇| 99精品视频在线观看| 色婷婷综合久色| 午夜精品久久久久久久蜜桃app| 一区二区三区精品视频在线| 欧美国产禁国产网站cc| 亚洲美女屁股眼交3| 蜜臀久久99精品久久久久宅男| 国产成人在线免费| 欧美老年两性高潮| 日本一区二区三区在线不卡| 亚洲国产精品一区二区尤物区| 精品伊人久久久久7777人| 99视频精品全部免费在线| 91精品国产综合久久福利软件| 国产日韩欧美激情| 日韩电影一二三区| 91免费观看视频在线| 久久人人超碰精品| 婷婷国产在线综合| eeuss鲁片一区二区三区在线观看| 欧美精品黑人性xxxx| |精品福利一区二区三区| 免费亚洲电影在线| 欧美性做爰猛烈叫床潮| 国产精品素人视频| 久久99精品久久久久久动态图 | 国产精品一级在线| 欧美视频在线观看一区二区| 久久久精品综合| 麻豆成人av在线| 3atv一区二区三区| 亚洲综合另类小说| 色欧美片视频在线观看| 国产精品乱人伦中文| 国产激情视频一区二区在线观看| 91精品国产综合久久久久久久久久| ●精品国产综合乱码久久久久| 国产成人午夜片在线观看高清观看| 欧美精品aⅴ在线视频| 性欧美大战久久久久久久久| 日本精品一区二区三区高清 | 91亚洲精华国产精华精华液| 久久久亚洲国产美女国产盗摄 | av在线播放一区二区三区| 久久综合五月天婷婷伊人| 美国一区二区三区在线播放| 欧美一区二区精品| 日本一道高清亚洲日美韩| 91精品国产色综合久久| 奇米精品一区二区三区四区 | 亚洲一区在线观看免费| 色乱码一区二区三区88| 亚洲黄色性网站| 欧美四级电影在线观看| 亚洲一区国产视频| 欧美理论在线播放| 久88久久88久久久| 久久午夜电影网| gogogo免费视频观看亚洲一| 亚洲欧洲成人精品av97| 日本乱人伦一区| 视频一区在线视频| 精品免费99久久| 国产不卡一区视频| 亚洲精品一二三| 欧美久久免费观看| 国产原创一区二区| 国产精品久线在线观看| 在线观看一区日韩| 日本欧美在线看| 日本一区二区视频在线| 在线观看日韩毛片| 久久99国产精品尤物| 国产精品美女久久久久av爽李琼| 色视频一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久精品人人做| 91国偷自产一区二区三区成为亚洲经典 | 国产精品二三区| 欧洲一区二区三区在线| 韩日av一区二区| 一区二区视频免费在线观看| 日韩午夜av电影| 91麻豆国产在线观看| 麻豆极品一区二区三区| 亚洲人妖av一区二区| 欧美电影精品一区二区| 91首页免费视频| 国内精品自线一区二区三区视频| 中文字幕在线观看不卡| 日韩欧美中文字幕公布| 99久久精品国产网站| 美女mm1313爽爽久久久蜜臀| 亚洲柠檬福利资源导航| 欧美精品一区二| 欧美一区二区三区免费观看视频| 成人综合婷婷国产精品久久蜜臀| 无吗不卡中文字幕| 亚洲天堂免费在线观看视频| 久久亚洲免费视频| 欧美一区二区三区电影| 91小视频在线观看| 国产福利一区在线| 老司机免费视频一区二区| 一区二区三区在线视频观看| 国产精品网站在线观看| 日韩午夜在线播放| 欧美日韩不卡一区| 91影院在线免费观看| 粉嫩蜜臀av国产精品网站| 激情都市一区二区| 免费成人在线观看视频| 丝袜美腿亚洲综合| 亚洲午夜久久久久中文字幕久| 中文字幕一区二区三区不卡在线| 精品91自产拍在线观看一区| 91麻豆精品国产| 欧美一区二区三区白人| 欧美日韩一区视频| 欧美日韩高清在线| 欧美日韩国产美| 在线电影院国产精品| 欧美日韩精品专区| 欧美精品乱码久久久久久| 欧美视频一区二区三区| 在线观看视频一区二区| 91久久精品一区二区二区| 日本乱人伦aⅴ精品| 91免费视频观看| 欧洲一区在线观看| 欧美日韩精品三区| 日韩欧美在线综合网| 日韩精品一区二区三区在线| 精品99999| 国产目拍亚洲精品99久久精品| 久久精品人人做人人爽97| 日本久久精品电影| 5566中文字幕一区二区电影| 日韩一区二区三区视频在线| 欧美mv和日韩mv的网站| 国产午夜久久久久| 中文字幕一区二区三区在线播放| 亚洲日本护士毛茸茸| 日韩成人一级片| 国产一区二区网址| 色综合久久中文综合久久97| 欧美午夜电影一区| www国产精品av| 日韩久久一区二区| 青青青爽久久午夜综合久久午夜| 狠狠网亚洲精品| 91亚洲精华国产精华精华液| 欧美日韩在线综合| 久久九九99视频| 亚洲综合av网| 国产一二精品视频| 欧美三区在线视频| 日韩欧美国产一二三区| 国产精品国产三级国产有无不卡 | 97精品超碰一区二区三区| 欧美日本一区二区| 欧美国产成人精品| 亚洲动漫第一页| 国产馆精品极品| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品久久夜| 视频在线观看91| 99视频精品全部免费在线| 欧美一区二区在线免费观看| 国产精品视频看| 午夜久久久久久电影| 高清不卡在线观看av| 91麻豆精品国产91久久久资源速度 | 亚洲尤物在线视频观看|