⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tools.c

📁 最新主流石器時代源代碼,包含諸多目前流行功能代碼.
💻 C
字号:
#include "error.h"#include "tools.h"#include "version.h"#define BUF_SIZE 4096//#define P(A) { printf("%d\n",A); }char Xtoken; // Original leading charactor of strxtokchar Ytoken; // Original tail charactor of strxtokint bakayaro(char *name){	int i,sum;        if (!name) return 0;        for (i=0,sum=0;name[i];i++) sum+=name[i]*(i+1);//        error3("Aho:%s%d\n","",sum);        return sum;}char *iptoa(unsigned long ip){	static char buffer[80];	unsigned char *p;	p=(unsigned char *)&ip;        sprintf(buffer,"%u.%u.%u.%u",p[0],p[1],p[2],p[3]);	return(buffer);}char *strxcpy(char *src){	static char dst[BUF_SIZE];	int i;		if (src) {		for (i=0;i<=strlen(src);i++) 			dst[i]=(src[i]=='\n')?'\t':src[i];		return(dst);	} else {		return(0);	}}// char *strxtok(char *src,int _limit){	static char buf[BUF_SIZE];	static char *ptr;	static int i,j,limit;	if (src) {		limit=_limit<BUF_SIZE?_limit:BUF_SIZE-1;		memcpy(buf,src,limit);		buf[limit]=0; i=0; j=0;	}	Xtoken=0; Ytoken=0;	if (i<limit) ptr=&buf[j]; else return(0);	Xtoken=buf[i];	while (i<limit) {		// '\'		if (buf[i]=='\\') {			// '\\' => '\' or '\;' => ';' or '\&' => '&'			if (buf[i+1]=='\\' || buf[i+1]==';' || buf[i+1]=='&') { 				i++; buf[j++]=buf[i++]; 			}			// '\' -> Ignore '\'			else { i++; }		} else if (buf[i]==';') { // Bug from AP			i++; buf[j++]=0;			Ytoken=';';			return(ptr);		} else {			buf[j++]=buf[i++];		}	}	buf[j]=0;	Ytoken=0;	return(ptr);}// Add up \ for \, ; and &char *xchange(char *src){	static char buffer[BUF_SIZE];	int i,j,limit;		if (!src) return(0);	limit=strlen(src);	if (limit>=BUF_SIZE/2) limit=BUF_SIZE/2-1;	for (j=0,i=0;i<limit;i++) {		if ((src[i]=='\\') || (src[i]==';') || (src[i]=='&')) 			buffer[j++]='\\';		buffer[j++]=src[i];	}	buffer[j]=0;	return(buffer);}/*main(){	char buffer[BUF_SIZE];	char *ptr;	int i,len;		sprintf(buffer,"%s;%s;\n",xprintf("123\\456"),xprintf("789;1000"));	printf("%s",buffer);}*/void stockInit(Stock_Struct *s){	s->head=s->tail=0;	s->count=0;}void stockAdd(Stock_Struct *s,char *data){	Stock *new;		if (!s) return;	if (!data) data="";	// Make new stock	new=(Stock *)calloc(1,sizeof(Stock));	new->data=strcpy((char *)calloc( 1,strlen(data)+1),data);	new->flag=0;	// Link new stock	if (!s->head) { // First Item, add to tail		s->head=s->tail=new;	} else { // Add to tail		s->tail->link=new;		s->tail=new;	}	s->count++;}char *stockOut(Stock_Struct *s){	static char buf[BUF_SIZE];	Stock *t;	if (!s || !s->head) return(0);	t=s->head;	s->head=t->link;	strcpy(buf,t->data);	free(t->data);	free(t);	s->count--;	if (!s->head) s->tail=0;	return(buf);}void stockDel(Stock_Struct *s,int count){	Stock *t;	if (!s || !s->head) return;	while ((t=s->head) && count) {		s->head=t->link;		free(t->data);		free(t);		count--;		s->count--;	}	if (!s->head) s->tail=0;}int stockCount(Stock_Struct *s){	return(s->count);}void stockClear(Stock_Struct *s){	Stock *t,*u;	if (!s) return;	u=s->head;	while (t=u) {		u=u->link;		free(t->data);		free(t);	}	s->head=0; s->tail=0;	s->count=0;}void stockStore(Stock_Struct *s,char *buf,int limit){	char *ptr;//	show(s);	if (!s || !buf) return;	ptr=strxtok(buf,limit);//	if (ptr && s->tail) P(s->tail->flag);	if (ptr && s->tail && 	   (s->tail->flag&STOCK_NONTERM)) { // Last message is non-terminated		strcat((char *)realloc(s->tail->data,			strlen(s->tail->data)+strlen(ptr)+1),ptr);		if (Ytoken==';') { s->tail->flag^=STOCK_NONTERM; s->count++; } 		ptr=strxtok(0,0);	}	while (ptr) {		stockAdd(s,ptr);		if (Xtoken=='&') s->tail->flag|=STOCK_START;	// The start		if (Ytoken!=';') { 	// Non-terminated			s->tail->flag|=STOCK_NONTERM;			s->count--;	// This is not a valid item		}		ptr=strxtok(0,0);	}}void rankAdd(Stock_Struct *ss,int rank,Rank_Struct *rs){	int i;		if (!ss) { error("rankAdd(): Null Stock?\n"); return; }	if (!rs) { error("rankAdd(): Null Storage?\n"); return; }	if (rank<=0) {error("rankAdd(): Invalid rank\n"); return; }	for (i=0;i<10;i++) { rs->entry[i].name[0]=0; rs->entry[i].score=0; }	rs->rank=rank;	for (i=0;(i<10)&&(ss->head);i++) {		strcpy(rs->entry[i].name,stockOut(ss));		if (ss->head) rs->entry[i].score=atoi(stockOut(ss));		else rs->entry[i].score=0;	}}int rankSelect(int rank){	return(((rank-1)/10)*10+1);}int charXCount(char *buf){	int i,count;	if (!buf) { error("charCount(): Null buffer?\n"); return(0); }	i=0; count=0;	while (buf[i]) {		if (buf[i]=='\\') {			if ((buf[i+1]=='\\') || (buf[i+1]=='&') || 			    (buf[i+1]==';')) {			    	i++;			}		} else if (buf[i]==';') count++;		i++;	}	return(count);}// Construct the 8-byte formatted stringchar *construct(char *src){	static char dst[BUF_SIZE];	const char *AND="&&&&&&&&";	int n;	if (!src) { dst[0]=0; return(dst); }	else {		sprintf(dst,"&;%d;%s",charXCount(src)+1,src);		n=strlen(dst)%8; 		if (!n) return(dst); 		strcat(dst,AND+n);	}	return(dst);}void show(Stock_Struct *s){	Stock *trace;	if (!s) return;	for (trace=s->head;trace;trace=trace->link) 		error3("<%s:%d>",trace->data,trace->flag);	error("\n");}/*main(){	Stock_Struct s;	char buf[100];	char buf1[4096];	int i;	stockInit(&s);	while (1) {		gets(buf);//		for (i=0;buf[i];i++) printf("(%c)",buf[i]);//		stockStore(&s,buf,strlen(buf));		printf("%s\n",construct(buf));//		show(&s);	}}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -