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

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

?? microcad.c

?? C語言高級實例解析的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:

#include <stdio.h>

#define	VERTICAL		480		
#define	HORIZONTAL		640		

#define	ARC_RES			64		

#define	SET_PIXEL		0x0F	
#define	CLEAR_PIXEL		0x00	
#define	FLIP_PIXEL		0x8F	

#define	MOUSE_LEFT		0x01	
#define	MOUSE_RIGHT		0x02	
#define	MOUSE_CENTER	0x04	

#define	LINE			0x01	
#define	BOX				0x02	
#define	CIRCLE			0x03	
#define	TEXT			0x04	
#define	ARC				0x05	
#define	GROUP			0x06	
#define	ACOPY			0x07	
#define	RCOPY			0x08	

unsigned char drawing[32000];	
unsigned dtop = 0, dpos;		


#define	PBYTES	11				
int grid = 0,					
	snap = 0,					
	tscale = 100,				
	xbase = 0,					
	ybase = 0;					
char tick = 1;					

char pixel = SET_PIXEL,			
	cursor_flag = 0,			
	edit = -1,					
	font[4608],					
	dfile[65],					
	ffile[65],					
	ifile[65],					
	vmode;						

unsigned mousex = -1, mousey = -1;	


unsigned sine[] = {
	    0,  1608,  3216,  4821,  6424,  8022,  9616, 11204,
	12785, 14359, 15924, 17479, 19024, 20557, 22078, 23586,
	25079, 26557, 28020, 29465, 30893, 32302, 33692, 35062,
	36410, 37736, 39040, 40320, 41575, 42806, 44011, 45190,
	46341, 47464, 48559, 49624, 50660, 51665, 52639, 53581,
	54491, 55368, 56212, 57022, 57797, 58538, 59243, 59913,
	60547, 61144, 61705, 62228, 62714, 63162, 63571, 63943,
	64276, 64571, 64826, 65043, 65220, 65358, 65457, 65516 };

extern FILE *get_file();	

main(argc, argv)
	int argc;
	char *argv[];
{
	int i, j, select;
	char *ptr;
	FILE *fp;

	concat(dfile, "MICROCAD.DWG");
	concat(ffile, "MICROCAD.FNT");
	*ifile = 0;

	for(i=1; i < argc; ++i) {
		ptr = argv[i];
		switch((toupper(*ptr++) << 8) | toupper(*ptr++)) {
			case 'F=' :		
				concat(ffile, ptr, ".FNT");
				break;
			case '/D' :		
			case '-D' :
				edit = 0;
				break;
			case '?' << 8:	
			case '/?' :
			case '-?' :
				abort("\nUse: MICROCAD [drawing file] [F=font file] [/Display]\n\nCopyright 1992-1993 Dave Dunfield\nAll rights reserved.\n");
			default:		/* Assume drawing filename */
				concat(dfile, argv[i], ".DWG"); } }


	fp = fopen(ffile, "qrbv");
	fread(font, sizeof(font), 1,fp);
	fclose(fp);

	if(fp = fopen(dfile, "rbv")) {
		fread(&grid, PBYTES,1, fp);
		dtop = fread(drawing, sizeof(drawing),1, fp);
		fclose(fp); }

	zero_drawing(dtop);

	if(!init_video())
		abort("VGA required!");

	if(!edit) {
		grid = 0;
		tick = 1;
		redraw();
		get_key();
		video_mode(vmode);
		return; }

	if(!init_mouse())
		abort("MOUSE required!");

	redraw();

	if(!fp) {
		message();
		printf("New drawing: '%s'", dfile); }

	for(;;) {
		if((i=mouse_status()) & MOUSE_LEFT) {	
			message();
			printf("A)rc B)ox C)ircle D)up E)rase F)unc L)ine M)ove R)edraw S)etup T)ext U)ndo");
			select = get_key(); }
		else if(j = test_key())
			select = j;
		else if(!(i & MOUSE_RIGHT))				
			continue;
		switch(toupper(select)) {
			case 'A' :		
				draw_arc();
				break;
			case 'B' :		
				draw_box();
				break;
			case 'C' :		
				draw_circle();
				break;
			case 'D' :		
				copy();
				break;
			case 'E' :		
				erase();
				break;
			case 'F' :		
				function();
				break;
			case 'L' :		
				draw_line();
				break;
			case 'M' :		
				move();
				break;
			case 'R' :		
				redraw();
				break;
			case 'T' :		
				draw_text();
				break;
			case 'U' :		
				undo();
				break;
			case 'S' :		
				message();
				printf("B)ase-markers C)ursor-base G)rid S)nap T)ext-scale");
				switch(toupper(get_key())) {
					case 'B' :		
						tick = tick ? 0 : 1;
						redraw();
						continue;
					case 'C' :		
						i = xbase;
						j = ybase;
						xbase = ybase = 0;
						if(!wait_for_left("Select cursor base point")) {
							xbase = mousex;
							ybase = mousey;
							goto exit; }
						xbase = i;
						ybase = j;
						continue;
					case 'G' :		
						grid = get_value("Grid spacing (0 to remove)?");
						redraw();
						continue;
					case 'S' :		
						snap = get_value("Snap spacing (0 to remove)?");
						goto exit;
					case 'T' :		
						tscale = get_value("Text scale (100 = 1:1)?");
					exit:
						message();
						continue; }
			default:
				message(); 
				printf("Unknown command!"); } }
}


function()
{
	FILE *fp;
	
	message();
	printf("F)ont I)nsert L)oad Q)uit S)ave");
	switch(toupper(get_key())) {
		case 'I' :		
			insert();
			return;
		case 'F' :		
			if(fp = get_file("font", ffile, ".FNT", "rbv")) {
				fread(font, sizeof(font), 1,fp);
				fclose(fp);
				redraw(); }
			return;
		case 'L' :		
			if(fp = get_file("drawing", dfile, ".DWG", "rbv")) {
				fread(&grid, PBYTES,1, fp);
				zero_drawing(fread(drawing, sizeof(drawing),1, fp));
				fclose(fp);
				redraw(); }
			return;
		case 'S' :		
			if(fp = get_file("drawing", dfile, ".DWG", "wbv")) {
				fwrite(&grid, PBYTES, 1,fp);
				if(dtop)
					fwrite(drawing, dtop,1, fp);
				fclose(fp);
				message(); }
			return;
		case 'Q' :		
			video_mode(vmode);
			exit(0); }

		message();
		printf("Unknown command!");
}


insert()
{
	unsigned i, dsave, base, size, minx, miny, x, y;
	char buffer[PBYTES];
	FILE *fp;

	if(!(fp = get_file("drawing", ifile, ".DWG", "rbv")))
		return;

	dsave = dtop;
	drawing[dtop++] = GROUP;
	draw(0);	
	draw(0);	
	draw(0);	

	fread(buffer, PBYTES,1, fp);
	size = fread(&drawing[base = dpos = dtop], sizeof(drawing) - dtop,1, fp);
	fclose(fp);

	minx = miny = 32767;
	while(drawing[dpos]) {
		i = dpos++;
		minx = min(x = dvalue(), minx);
		miny = min(y = dvalue(), miny);
		dpos = i;
		skip_object(); }
	
	dpos = base;
	while(x = drawing[i = dpos]) {
		dtop = ++dpos;
		draw(dvalue() - minx);
		draw(dvalue() - miny);
		
		if(x == ACOPY) {
			drawing[i] = RCOPY;
			draw((dvalue()+base) - i); }
		dpos = i;
		skip_object(); }

	dtop = dsave + 1;
	draw(0);
	draw(0);
	draw(size);

	message();
	printf("INSERT: Selection insertion point");
	pixel = FLIP_PIXEL;
newbox:
	dpos = dsave;
	draw_object(x = mousex, y=mousey);
	while(!((i = mouse_status()) & MOUSE_LEFT)) {
		if(i & MOUSE_RIGHT) {
			dpos = dsave;
			draw_object(x, y);
			zero_drawing(dsave);
			message();
			return; }
		if((x != mousex) || (y != mousey)) {
			dpos = dsave;
			draw_object(x, y);
			goto newbox; } }

	dpos = dsave;
	pixel = SET_PIXEL;
	dtop = dsave + 1;
	draw(x);
	draw(y);
	dtop = base + size;
	redraw();
}


draw_line()
{
	int x, y, x1, y1, s;
	if(wait_for_left("LINE: From point?"))
		return;
	gotoxy(30, 0); printf(" To point?");
	x = mousex;
	y = mousey;
again:
	pixel = FLIP_PIXEL;
newline:
	line(x, y, x1 = mousex, y1 = mousey);
	while(!((s = mouse_status()) & MOUSE_LEFT)) {
		if(s & MOUSE_RIGHT) {
			line(x, y, x1, y1);
			pixel = SET_PIXEL;
			message();
			return; }
		if((mousex != x1) || (mousey != y1)) {
			line(x, y, x1, y1);
			goto newline; } }
	pixel = SET_PIXEL;
	drawing[dpos = dtop++] = LINE;
	draw(x);
	draw(y);
	draw(x1 - x);
	draw(y1 - y);
	draw_object(0, 0);
	x = x1;
	y = y1;
	goto again;
}


draw_box()
{
	int x, y, x1, y1, s;
	if(wait_for_left("BOX: First corner?"))
		return;
	gotoxy(30, 0); printf(" Second corner?");
	x = mousex;
	y = mousey;
	pixel = FLIP_PIXEL;
newbox:
	box(x, y, x1 = mousex, y1 = mousey);
	while(!((s = mouse_status()) & MOUSE_LEFT)) {
		if(s & MOUSE_RIGHT) {
			box(x, y, x1, y1);
			message();
			return; }
		if((mousex != x1) || (mousey != y1)) {
			box(x, y, x1, y1);
			goto newbox; } }
	pixel = SET_PIXEL;
	message();
	drawing[dpos = dtop++] = BOX;
	draw(x);
	draw(y);
	draw(x1 - x);
	draw(y1 - y);
	draw_object(0, 0);
}

draw_circle()
{
	int x, y, r, r1, a, b, s;
	if(wait_for_left("CIRCLE: Select center point"))
		return;
	x = mousex;
	y = mousey;
	pixel = FLIP_PIXEL;
	r = 1;
newcircle:
	circle(x, y, r);
	while(!((s = mouse_status()) & MOUSE_LEFT)) {
		if(s & MOUSE_RIGHT) {
			circle(x, y, r);
			message();
			return; }
		a = abs(mousex - x);
		b = abs(mousey - y);
		if((r1 = sqrt((a*a) + (b*b))) != r) {
			gotoxy(40, 0); printf("Radius=%-3u", r1);
			circle(x, y, r);
			r = r1;
			goto newcircle; } }
	pixel = SET_PIXEL;
	message();
	drawing[dpos = dtop++] = CIRCLE;
	draw(x);
	draw(y);
	draw(r);
	draw_object(0, 0);
}


draw_arc()
{
	int x, y, r, v1, v2, x1, y1, s;

	if(wait_for_left("ARC: Select center point"))
		return;
	x = mousex;
	y = mousey;
	if(wait_for_left("ARC: Select starting point"))
		return;
	x1 = abs(mousex - x);
	y1 = abs(mousey - y);
	r = sqrt((x1*x1) + (y1*y1));
	v1 = find_vector(x, y, r, mousex, mousey);
	message();
	printf("ARC: Select ending point");
	pixel = FLIP_PIXEL;
newarc:
	v2 = find_vector(x, y, r, x1=mousex, y1=mousey);
	arc(x, y, r, v1, v2);
	while(!((s = mouse_status()) & MOUSE_LEFT)) {
		if(s & MOUSE_RIGHT) {
			arc(x, y, r, v1, v2);
			message();
			return; }
		if((mousex != x1) || (mousey != y1)) {
			arc(x, y, r, v1, v2);
			goto newarc; } }
	pixel = SET_PIXEL;
	message();
	drawing[dpos = dtop++] = ARC;
	draw(x);
	draw(y);
	draw(r);
	draw(v1);
	draw(v2);
	draw_object(0, 0);
}


draw_text()
{
	unsigned i, x, y;
	char buffer[80], *ptr;

	message();
	printf("String?");
	fgets(ptr = buffer, sizeof(buffer)-1, stdin);
	message();
	if(*buffer) {
		printf("TEXT: Select position");
		pixel = FLIP_PIXEL;
	newtext:
		text(buffer, x = mousex, y = mousey, tscale);
		while(!((i = mouse_status()) & MOUSE_LEFT)) {
			if(i & MOUSE_RIGHT) {					
				text(buffer, x, y, tscale);
				pixel = SET_PIXEL;
				message();
				return; }
			if((x != mousex) || (y != mousey)) {	
				text(buffer, x, y, tscale);
				goto newtext; } }

		pixel = SET_PIXEL;
		message();
		drawing[dpos = dtop++] = TEXT;
		draw(mousex);
		draw(mousey);
		draw(tscale);
		do
			drawing[dtop++] = *ptr;
		while(*ptr++);
		draw_object(0, 0); }
}


draw_cursor()
{
	char s;

	s = pixel;
	pixel = FLIP_PIXEL;
	line(max(0, mousex-3), mousey, min(HORIZONTAL-1,mousex+3), mousey);
	line(mousex, max(0,mousey-3), mousex, min(VERTICAL-1,mousey+3));
	pixel = s;
}


redraw()
{
	int x, y;

	video_mode(0x11);
	dpos = cursor_flag = 0;
	pixel = SET_PIXEL;
	while(!draw_object(0, 0));
	if(grid) {
		for(y = 0; y < VERTICAL; y += grid)
			for(x=0; x < HORIZONTAL; x += grid)
				set_pixel(x, y); }
}


undo()
{
	unsigned dlast;
	dpos = dlast = 0;
	while(drawing[dpos]) {
		dlast = dpos;
		if(skip_object())
			return; }
	dpos = dlast;
	pixel = CLEAR_PIXEL;
	draw_object(0, 0);
	pixel = SET_PIXEL;
	zero_drawing(dlast);
	message();
}


erase()
{
	unsigned e, d, i, x, y;

	if(select_object("ERASE")) {
		d = dtop;
		e = dpos;		
		while(i = drawing[dpos]) {
			if(i == ACOPY) {
				i = dpos++;
				x = dvalue();
				y = dvalue();
				if(dvalue() == e) {	
					dtop = e + 1;
					draw(x);
					draw(y);
					e = i; }
				dpos = i; }
			skip_object(); }

		dpos = e;
		skip_object();
		x = dpos - e;
		while(i = drawing[dpos]) {
			if(i == ACOPY) {
				i = dpos;
				dpos += 5;
				if((y = dvalue()) > e) {
					dtop = dpos - 2;
					draw(y - x); }
				dpos = i; }
			skip_object(); }

	/* Remove the selected entry */
		dpos = e;
		skip_object();
		while(dpos < d)
			drawing[e++] = drawing[dpos++];
		zero_drawing(e); }
}

move()
{
	unsigned psave, i, x, y, sx, sy;
	if(select_object("MOVE")) {
		psave = dpos;
		++dpos;
		sx = dvalue();
		sy = dvalue();
		message();
		printf("MOVE: Select new position");
		pixel = FLIP_PIXEL;
newmove:
		dpos = psave;
		draw_object((x = mousex) - sx, (y = mousey) - sy);
		while(!((i = mouse_status()) & MOUSE_LEFT)) {
			if(i & MOUSE_RIGHT) {					
				dpos = psave;
				draw_object(x - sx, y - sy);
				goto skipmove; }
			if((x != mousex) || (y != mousey)) {	
				dpos = psave;
				draw_object(x - sx, y - sy);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美主播一区二区三区美女| 国产精品妹子av| 国产精品一区二区黑丝| 亚洲国产cao| 综合久久国产九一剧情麻豆| 久久蜜桃一区二区| 久久久一区二区三区| 亚洲一区二区三区四区不卡| 午夜欧美电影在线观看| 亚洲国产一区视频| 成人avav影音| 99国产精品久久久| 欧美亚洲尤物久久| 欧美大片在线观看一区| 精品乱人伦一区二区三区| 26uuu另类欧美亚洲曰本| 国产精品美女久久久久av爽李琼 | 成人黄页在线观看| 欧美一级高清大全免费观看| 久久久一区二区| 麻豆免费精品视频| 国产白丝网站精品污在线入口| 成人免费看片app下载| 色婷婷国产精品| 欧美日韩国产综合久久| 精品国产一区a| 国产精品第13页| 日韩av一区二区三区四区| 国产一区二区三区在线观看免费| 国产suv精品一区二区6| 日韩一区二区三免费高清| 日韩综合小视频| 国产福利一区二区三区| 色婷婷久久久久swag精品| 最新久久zyz资源站| 婷婷成人综合网| 欧美日本视频在线| 三级欧美韩日大片在线看| 欧美日本一区二区三区四区 | 91首页免费视频| 91精品国产综合久久蜜臀| 国产蜜臀97一区二区三区| 亚洲电影中文字幕在线观看| 在线视频一区二区三| 亚洲风情在线资源站| 制服丝袜亚洲播放| 国产在线乱码一区二区三区| 在线视频亚洲一区| 亚洲成人精品影院| av一区二区三区| 欧美精品一区二区三区四区| 国产电影一区二区三区| 亚洲视频在线一区| 精品视频全国免费看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 成人开心网精品视频| 亚洲自拍都市欧美小说| 欧美欧美欧美欧美首页| 国产麻豆欧美日韩一区| 亚洲婷婷在线视频| 欧美一级艳片视频免费观看| 亚洲一区在线电影| 精品国产电影一区二区| 成人av免费在线| 亚洲成人动漫av| 久久久不卡影院| 在线视频你懂得一区| 久久精品国产免费| 91精品婷婷国产综合久久性色| 久久99精品国产| 26uuu另类欧美亚洲曰本| 91美女片黄在线| 久久精品国产在热久久| 日韩一区中文字幕| 日韩欧美中文字幕公布| 懂色av一区二区三区蜜臀| 亚洲国产日韩a在线播放性色| 久久中文娱乐网| 欧美专区日韩专区| 国产福利电影一区二区三区| 亚洲成a人片综合在线| 中文字幕欧美区| 不卡一区二区三区四区| 美腿丝袜亚洲三区| 一区二区三区免费观看| 在线视频你懂得一区二区三区| 韩国欧美国产1区| 亚洲成人资源网| 成人免费一区二区三区在线观看 | 成人h动漫精品| 精品一区二区三区日韩| 亚洲bt欧美bt精品777| 国产精品国产三级国产aⅴ中文| 欧美一区二区视频在线观看2020 | 久久69国产一区二区蜜臀| 亚洲尤物视频在线| 国产精品拍天天在线| 亚洲精品在线三区| 欧美日韩一区二区三区高清| 成人精品一区二区三区中文字幕| 日韩高清在线不卡| 亚洲综合精品久久| 亚洲精品乱码久久久久| 欧美日韩亚洲综合在线| 日本高清不卡在线观看| 免费亚洲电影在线| 中文字幕日本不卡| 中文字幕av一区二区三区| 久久久久久久久蜜桃| 精品久久久久久久久久久久久久久| 欧美久久久久久蜜桃| 国产美女主播视频一区| 国产一区亚洲一区| 韩国女主播成人在线观看| 久久99久久精品| 久久成人精品无人区| 麻豆中文一区二区| 韩国成人在线视频| 经典三级在线一区| 国产精品中文字幕欧美| 成人性生交大片免费看视频在线| 国产精品一区二区在线观看不卡| 国产精品123| 成人午夜私人影院| 99麻豆久久久国产精品免费优播| 91丨porny丨首页| 欧美在线观看视频一区二区| 欧美亚洲国产一区二区三区| 欧美日韩在线电影| 日韩午夜在线观看| 久久久高清一区二区三区| 亚洲国产高清不卡| 一个色妞综合视频在线观看| 亚洲成av人**亚洲成av**| 麻豆精品精品国产自在97香蕉 | 日韩毛片视频在线看| 亚洲宅男天堂在线观看无病毒| 丝袜亚洲另类欧美综合| 国内久久精品视频| av在线这里只有精品| 欧美日韩电影一区| 久久免费的精品国产v∧| 中文字幕日韩一区| 日韩成人精品视频| 成人晚上爱看视频| 精品污污网站免费看| 久久久久久久免费视频了| 一区二区三区在线视频播放| 日韩国产欧美在线视频| 国产一区二区电影| 欧洲国内综合视频| 久久久精品黄色| 亚洲在线视频免费观看| 九九精品一区二区| 91网上在线视频| 日韩欧美电影一区| 亚洲美女电影在线| 亚洲精品写真福利| 久久99精品国产麻豆婷婷| 91免费版pro下载短视频| 精品区一区二区| 亚洲一区二区三区爽爽爽爽爽| 国产综合久久久久影院| 欧美午夜精品一区二区三区| 久久一夜天堂av一区二区三区| 亚洲午夜av在线| 成人毛片老司机大片| 日韩精品一区二区三区视频播放 | 国产一区二区三区免费观看| 欧美三级韩国三级日本三斤| 国产女主播一区| 另类成人小视频在线| 色欧美日韩亚洲| 久久天堂av综合合色蜜桃网| 亚洲午夜三级在线| 99久久免费精品高清特色大片| 欧美mv和日韩mv的网站| 亚洲成人一区二区在线观看| 91在线看国产| 国产精品久久久爽爽爽麻豆色哟哟| 蜜臀久久99精品久久久画质超高清 | 91国产免费观看| 中文字幕第一区综合| 经典三级在线一区| 欧美一级一级性生活免费录像| 亚洲国产精品久久不卡毛片 | 中文字幕的久久| 国产一二精品视频| 精品国产一区二区三区四区四| 婷婷六月综合网| 欧美亚洲综合久久| 亚洲猫色日本管| 99久久婷婷国产综合精品| 日本一区免费视频| 国产成人午夜电影网| 精品第一国产综合精品aⅴ| 日本亚洲天堂网| 日韩一区二区三区视频| 日本大胆欧美人术艺术动态| 欧美一区二区人人喊爽|