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

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

?? life.c

?? 操作系統SunOS 4.1.3版本的源碼
?? C
字號:
#ifndef lintstatic char sccsid[] = "@(#)life.c 1.1 92/07/30 Copyr 1986 Sun Micro";#endif/* * Copyright (c) 1984 by Sun Microsystems Inc. */#include <stdio.h>#include "life.h"#define MIN(a,b) ((a) < (b) ? (a) : (b))#define MAX(a,b) ((a) > (b) ? (a) : (b))int	STACK = 64;/* #define STACK 2000		*/static int *addx;static int *addy;static int stack;struct point {    unsigned char p_color;    int p_y;			/* x from row pointer */    short p_delete;    struct point *p_nxt;};struct row {    int r_x;    struct point *r_point;    struct row *r_nxt;} *row;initstack(){	addx = (int *)malloc(STACK*sizeof(int));	addy = (int *)malloc(STACK*sizeof(int));}addpoint(x,y)	register x,y;{	register struct row *rw;	struct row *oldrw, *newrw;	if (row == NULL) {		row = (struct row *)malloc(sizeof(struct row));		row->r_x = x;		row->r_point = NULL;		addtorow(row, y);		row->r_nxt = NULL;		return;	}				if (x < row->r_x) {		rw = (struct row *)malloc(sizeof(struct row));		rw->r_x = x;		rw->r_point = NULL;		addtorow(rw, y);		rw->r_nxt = row;		row = rw;		return;	}	for(rw = row, oldrw = row; rw != NULL; oldrw = rw, rw = rw->r_nxt) {		if (rw->r_x == x) {			addtorow(rw, y);			return;		}		if (x < rw->r_x)			break;	}	newrw = (struct row *)malloc(sizeof(struct row));	newrw->r_x = x;	newrw->r_point = NULL;	addtorow(newrw, y);	newrw->r_nxt = rw;	oldrw->r_nxt = newrw;}addtorow(rw, y)	struct row *rw;{	struct point *pt, *oldpt, *newpt;		if (rw->r_point == NULL) {		pt = (struct point *)malloc(sizeof(struct point));		pt->p_color = INITCOLOR;		pt->p_y = y;		pt->p_delete = 0;		pt->p_nxt = NULL;		rw->r_point = pt;		return;	}				if (y < rw->r_point->p_y) {		pt = (struct point *)malloc(sizeof(struct point));		pt->p_color = INITCOLOR;		pt->p_y = y;		pt->p_delete = 0;		pt->p_nxt = rw->r_point;		rw->r_point = pt;		return;	}	for(pt = rw->r_point, oldpt = pt; pt != NULL;	    oldpt = pt, pt = pt->p_nxt) {		if (pt->p_y == y)			return;		if (y < pt->p_y)			break;	}	newpt = (struct point *)malloc(sizeof(struct point));	newpt->p_color = INITCOLOR;	newpt->p_y = y;	newpt->p_delete = 0;	newpt->p_nxt = pt;	oldpt->p_nxt = newpt;}deletepoint(x,y){	struct row *rw, *oldrw;	struct point *pt, *oldpt;		for (rw = row, oldrw = row; rw != NULL; oldrw = rw, rw = rw->r_nxt) {		if (rw->r_x == x)			break;	}	if (rw == NULL) {		fprintf(stderr, "tried to delete nonexistent point\n");		exit(1);	}	for (pt = rw->r_point, oldpt = pt; pt != NULL;	    oldpt = pt, pt = pt->p_nxt) {		if (pt->p_y == y)			break;	}	if (pt == NULL) {		fprintf(stderr, "tried to delete nonexistent point\n");		exit(1);	}	if (oldpt == pt) {		rw->r_point = pt->p_nxt;		if (rw->r_point == NULL) {			deleterow(oldrw, rw);					}	}	else		oldpt->p_nxt = pt->p_nxt;	free(pt);}deleterow(oldrw, rw)    struct row *oldrw, *rw;{	if (oldrw == rw) {		if (rw->r_nxt == NULL)			row = NULL;		else			row = rw->r_nxt;	}	else		oldrw->r_nxt = rw->r_nxt;	free(rw);}/*  * for debugging */printall(){	struct row *rw;	struct point *pt;		for (rw = row; rw != NULL; rw = rw->r_nxt)		for (pt = rw->r_point; pt != NULL; pt = pt->p_nxt)			printf("%d %d (%d)\n", rw->r_x, pt->p_y, pt->p_delete);}printrw(){	struct row *rw;		for (rw = row; rw != NULL; rw = rw->r_nxt)		printf("%d 0x%x\n", rw->r_x, rw->r_point);}printpt(rw)	struct row *rw;{	struct point *pt;		for (pt = rw->r_point; pt != NULL; pt = pt->p_nxt)		printf("%d %d (%d)\n", rw->r_x, pt->p_y, pt->p_delete);}zerolist(){	struct row *rw;	struct point *pt;	for (rw = row; rw != NULL; rw = rw->r_nxt) {		for (pt = rw->r_point; pt != NULL; pt = pt->p_nxt)			free(pt);		free(rw);	}	row = NULL;}/*  * called from lifetool */newgen(){	struct row *oldrw, *rw;	struct point *pt, *oldpt;	int i,j;	for (rw = row, oldrw = rw; rw != NULL;	    oldrw = rw, rw = rw->r_nxt) {		for (pt = rw->r_point, oldpt = pt; pt != NULL;		    oldpt = pt, pt = pt->p_nxt)			pt->p_delete = nbors(oldrw, rw, oldpt, pt);	}	newstuff();	lock();	for (rw = row; rw != NULL; rw = rw->r_nxt) {		for (pt = rw->r_point; pt != NULL; pt = pt->p_nxt){			if (pt->p_delete >=4 || pt->p_delete <=1) {				/* 				 * should delete pt directly				 */				i = rw->r_x;				j = pt->p_y;				deletepoint(i,j);				i+= leftoffset;				j += upoffset;				erase_stone(i, j);			}		}	}	if (amicolor) {		for (rw = row; rw != NULL; rw = rw->r_nxt)			for (pt = rw->r_point; pt != NULL; pt = pt->p_nxt)				if (pt->p_color < CMSIZE-2)					pt->p_color++;	}	while(stack > 0){		stack--;		i = addx[stack];		j = addy[stack];		addpoint(i, j);		i+= leftoffset;		j += upoffset;		paint_stone(i, j, INITCOLOR);	}	if (amicolor) {		for (rw = row; rw != NULL; rw = rw->r_nxt) {			for (pt = rw->r_point; pt != NULL; pt = pt->p_nxt) {				i = rw->r_x + leftoffset;				j = pt->p_y + upoffset;				paint_stone(i, j, pt->p_color);			}		}	}	unlock();}nbors(oldrw, rw, oldpt, pt)	struct row *rw, *oldrw;	struct point *pt, *oldpt;{	register struct point *tmppt;	int x;	register int y, ty;	register int cnt = 0;	x = rw->r_x;	y = pt->p_y;	if (oldpt != pt && oldpt->p_y == y-1)		cnt++;	if (pt->p_nxt != NULL && pt->p_nxt->p_y == y+1)		cnt++;	if (rw != oldrw && oldrw->r_x == x-1) {		for(tmppt = oldrw->r_point; tmppt != NULL;		    tmppt = tmppt->p_nxt) {			if ((ty = tmppt->p_y) == y-1)				cnt++;			if (ty == y)				cnt++;			if (ty == y+1) {				cnt++;				break;			}			if (ty >= y+1)				break;		}	}	if (rw->r_nxt != NULL && rw->r_nxt->r_x == x+1) {		for(tmppt = rw->r_nxt->r_point; tmppt != NULL;		    tmppt = tmppt->p_nxt) {			if ((ty = tmppt->p_y) == y-1)				cnt++;			if (ty == y)				cnt++;			if (ty == y+1) {				cnt++;				break;			}			if (ty >= y+1)				break;		}	}	return cnt;}struct xy {	int x,y;	short cnt;	struct xy *nxt;		/* next in this bucket */	struct xy *chain;	/* for chaining nonzero entries together */};#define HASHSIZE 64struct xy *candidates;struct xy *hash[HASHSIZE][HASHSIZE];#define addxy(X,Y) \	xx = (X) % HASHSIZE; \	yy = (Y) % HASHSIZE; \	p = hash[xx][yy]; \	for (;;) { \		if (p == NULL) { \			p = (struct xy *)newmalloc(); \			p->x = (X); \			p->y = (Y); \			p->cnt = 1; \			p->nxt = hash[xx][yy]; \			hash[xx][yy] = p; \			break; \		} \		if (p->x == (X) && p->y == (Y)) { \			p->cnt++; \			if (p->cnt == 3) { \				p->chain = candidates; \				candidates = p; \			} \			break; \		} \		p = p->nxt; \	}newstuff(){	register struct row *rw;	register struct point *pt;	register struct xy *p;	register unsigned int x, y;	register unsigned int xx,yy;	static int firsttime = 1;	if (firsttime) {		firsttime = 0;		initchain();	}	candidates = NULL;	bzero(hash, HASHSIZE * HASHSIZE * sizeof(struct xy *));	for (rw = row; rw != NULL; rw = rw->r_nxt) {		x = rw->r_x;		for (pt = rw->r_point; pt != NULL; pt = pt->p_nxt) {			y = pt->p_y;			addxy(x-1, y-1);			addxy(x-1, y);			addxy(x-1, y+1);			addxy(x, y-1);			addxy(x, y+1);			addxy(x+1, y-1);			addxy(x+1, y);			addxy(x+1, y+1);		}	}	findbirths();}findbirths(){	register struct xy *p;		for (p = candidates; p != NULL; p = p->chain) {		if (p->cnt == 3)			addtostack(p->x, p->y);	}	restorespace();}addtostack(i, j){	int	*x, *y;		addx[stack] = i;	addy[stack++] = j;	if (stack >= STACK) {		/* fprintf(stderr, "overflowed stack of size %d\n", STACK); */		x = (int *)malloc(2*STACK*sizeof(int));		y = (int *)malloc(2*STACK*sizeof(int));		bcopy(addx, x, STACK*sizeof(int));		bcopy(addy, y, STACK*sizeof(int));		STACK *= 2;		free(addx);		free(addy);		addx = x;		addy = y;	}}printhashdata(){	int x, y;	struct xy *p;		for(x = 0; x < HASHSIZE; x++)	for(y = 0; y < HASHSIZE; y++)	for (p = hash[x][y]; p != NULL; p = p->nxt) {		printf("%d %d (%d)\n", p->x, p->y, p->cnt);	}}struct chain {	struct xy ch_xy;	struct chain *ch_nxt;} *chain, *headchain, *endchain;initchain(){	headchain = (struct chain *)malloc(sizeof(struct chain));	headchain->ch_nxt = NULL;	endchain = headchain;	chain = headchain;}restorespace(){	chain = headchain;}newmalloc(){	struct chain *ch;		chain = chain->ch_nxt;	if (chain == NULL) {		ch = (struct chain *)malloc(sizeof(struct chain));		ch->ch_nxt = NULL;		endchain->ch_nxt = ch;		endchain = ch;		chain = ch;	}	return (int)(chain);}/*  * Returns true if this point exists, false otherwise. * When true, actually returns color. */life_get(x,y){	struct row *rw;	struct point *pt;		x -= leftoffset;	y -= upoffset;	for (rw = row; rw != NULL; rw = rw->r_nxt) {		if (rw->r_x == x)			break;	}	if (rw == NULL)		return (0);	for (pt = rw->r_point; pt != NULL; pt = pt->p_nxt) {		if (pt->p_y == y)			break;	}	if (pt == NULL)		return (0);	return (pt->p_color);}	paint_board(){	struct row *rw;	struct point *pt;		for (rw = row; rw != NULL; rw = rw->r_nxt)		for (pt = rw->r_point; pt != NULL; pt = pt->p_nxt)			paint_stone(rw->r_x + leftoffset,			    pt->p_y + upoffset, pt->p_color);}/* returns true if there is a point */life_getpoint(xp, yp)	int	*xp, *yp;{	struct row *rw;	struct point *pt;	for (rw = row; rw != NULL; rw = rw->r_nxt) {		if (pt = rw->r_point) {			*xp = rw->r_x;			*yp = pt->p_y;			return (1);		}	}	return (0);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区视频| 蜜桃视频在线观看一区二区| 亚洲国产日韩一区二区| 6080亚洲精品一区二区| 亚洲精品在线网站| 一区二区三国产精华液| 国产福利91精品一区| 欧美乱熟臀69xxxxxx| 国产片一区二区| 日本亚洲三级在线| 在线免费观看日韩欧美| 久久久久久久久久久久久久久99| 婷婷夜色潮精品综合在线| 丁香五精品蜜臀久久久久99网站| 91麻豆精品国产91久久久更新时间 | 91小视频免费观看| 精品国产一区二区三区av性色| 亚洲午夜精品一区二区三区他趣| 丁香六月久久综合狠狠色| 久久综合九色综合97婷婷女人| 亚洲高清在线视频| 欧美色男人天堂| 自拍偷拍国产亚洲| 不卡一卡二卡三乱码免费网站| 欧美一区二区三区性视频| 亚洲国产sm捆绑调教视频| 欧美三片在线视频观看| 亚洲人成精品久久久久| 色呦呦一区二区三区| 亚洲婷婷综合久久一本伊一区| 成人综合日日夜夜| 国产精品美女久久久久久久| 国产91丝袜在线18| 国产精品欧美一级免费| av亚洲精华国产精华精华| 日本女优在线视频一区二区| 欧美一区二区在线不卡| 日韩1区2区3区| 欧美成人一区二区三区片免费 | 亚洲人成人一区二区在线观看| 成人h精品动漫一区二区三区| 国产精品久久久久久一区二区三区| 国产一区不卡在线| 国产精品久久久久天堂| 91麻豆国产香蕉久久精品| 樱桃视频在线观看一区| 欧美性猛交xxxx乱大交退制版 | 欧美精选午夜久久久乱码6080| 亚洲狼人国产精品| 欧美丰满一区二区免费视频| 久久精品噜噜噜成人88aⅴ| 久久免费看少妇高潮| 成人午夜伦理影院| 一区二区三区.www| 日韩欧美在线观看一区二区三区| 国产一区二区女| 国产精品久久福利| 精品视频一区 二区 三区| 免费精品视频最新在线| 欧美国产成人在线| 在线观看国产91| 蜜臀av性久久久久蜜臀aⅴ | 成人天堂资源www在线| 亚洲欧美激情在线| 日韩一区二区麻豆国产| 不卡视频一二三| 亚洲va国产va欧美va观看| 精品国产一区二区三区四区四 | 国产高清久久久| 亚洲欧美另类小说| 欧美电影免费提供在线观看| 国产91丝袜在线播放| 亚洲影视资源网| 久久久国产精品不卡| 欧美天堂一区二区三区| 国产成人在线视频免费播放| 婷婷国产在线综合| 国产精品久久久久久亚洲毛片| 在线播放一区二区三区| av在线不卡电影| 久久99国产精品免费| 亚洲女人****多毛耸耸8| 欧美xxxx老人做受| 欧美日韩中文字幕精品| 成人免费高清在线观看| 男人操女人的视频在线观看欧美 | 久久久久99精品一区| 91国产免费观看| 国产精品1区2区| 日韩电影免费一区| 亚洲另类一区二区| 国产日韩视频一区二区三区| 88在线观看91蜜桃国自产| 色哟哟国产精品| 成人免费视频视频| 麻豆视频观看网址久久| 婷婷综合在线观看| 一区二区三区成人在线视频| 国产精品视频麻豆| 久久精品日产第一区二区三区高清版 | 中文一区二区在线观看| 精品久久五月天| 337p亚洲精品色噜噜| 在线观看亚洲成人| 91麻豆蜜桃一区二区三区| 成人美女视频在线看| 国产成人精品亚洲午夜麻豆| 国产在线播放一区三区四| 奇米888四色在线精品| 午夜精品久久久久| 天天综合日日夜夜精品| 亚洲一区二区黄色| 亚洲一区二区三区视频在线| 一区二区三区在线观看欧美| 亚洲欧美一区二区三区孕妇| 国产精品一区二区三区乱码| 久久电影网站中文字幕| 美女高潮久久久| 久久精工是国产品牌吗| 黄色日韩三级电影| 国产精品亚洲第一| 国产酒店精品激情| 成人蜜臀av电影| 色综合激情五月| 精品视频一区三区九区| 欧美福利电影网| 欧美精品一区二| 日本一区二区视频在线观看| 国产精品妹子av| 亚洲女人****多毛耸耸8| 亚洲aaa精品| 久久精品国产久精国产| 国产成人aaa| 91香蕉国产在线观看软件| 欧美性大战久久| 日韩一级片网站| 久久久噜噜噜久噜久久综合| 中文字幕制服丝袜一区二区三区| 亚洲码国产岛国毛片在线| 亚洲成人在线免费| 国产乱子伦视频一区二区三区| 日韩精品在线一区| 亚洲国产激情av| 亚洲精品国产视频| 日韩一区欧美二区| 国内精品伊人久久久久av影院| 成人av免费观看| 日本高清不卡视频| 欧美成人video| 亚洲天堂a在线| 日韩福利电影在线观看| 国产高清精品网站| 欧美一区二区三区免费| 国产精品久久网站| 日本成人在线不卡视频| av福利精品导航| 日韩美女视频在线| 最新国产精品久久精品| 美腿丝袜亚洲色图| 欧美在线播放高清精品| 久久久不卡网国产精品二区| 亚洲午夜免费电影| 国产精品77777竹菊影视小说| 欧美撒尿777hd撒尿| 国产精品色呦呦| 六月丁香综合在线视频| 欧美在线观看视频在线| 中文字幕的久久| 蓝色福利精品导航| 欧美亚洲日本国产| 国产精品久久久久影院亚瑟| 精品夜夜嗨av一区二区三区| 欧美性大战久久| 亚洲欧洲日韩av| 国产不卡视频在线观看| 日韩一区二区三区在线观看| 亚洲综合色成人| 99精品欧美一区二区蜜桃免费| 日韩欧美一级精品久久| 亚洲成人午夜电影| 91免费在线视频观看| 中文字幕乱码久久午夜不卡| 激情伊人五月天久久综合| 欧美群妇大交群中文字幕| 亚洲图片自拍偷拍| 一本到不卡精品视频在线观看| 中文字幕av在线一区二区三区| 国产一区二区三区免费观看| 欧美日韩高清一区二区三区| 18涩涩午夜精品.www| 成人短视频下载| 国产精品萝li| 成人av电影在线观看| 国产视频不卡一区| 狠狠色丁香久久婷婷综合丁香| 日韩欧美中文字幕一区| 免费成人在线观看视频| 日韩一区二区电影在线| 蜜桃视频一区二区三区| 欧美v日韩v国产v|