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

📄 difflib.c

📁 这个是内存数据库中的一个管理工具
💻 C
📖 第 1 页 / 共 2 页
字号:
	if (!u_diff2w_diff(mindiff, u_diff_fn, w_diff_fn)) {		UNLINK(w_diff_fn);		ERRHNDL(0, "u_diff2w_diff returns 0 in u_diff2c_diff", "", 1);	}	rtrn = w_diff2c_diff(mindiff, w_diff_fn, c_diff_fn);	UNLINK(w_diff_fn);	return rtrn;}/* u_diff2c_diff */intu_diff2lwc_diff(int mindiff, int LWC, char *u_diff_fn, char *lwc_diff_fn){	TRACE(fprintf(STDERR, "u_diff2lwc_diff(%i,%s,%s)\n", LWC, u_diff_fn, lwc_diff_fn));	switch (LWC) {	case 0:		return (u_diff2l_diff(u_diff_fn, lwc_diff_fn));	case 1:		return (u_diff2w_diff(mindiff, u_diff_fn, lwc_diff_fn));	case 2:		return (u_diff2c_diff(mindiff, u_diff_fn, lwc_diff_fn));	default:		ErrXit("u_diff2lwc_diff called with wrong LWC", "", 1);	}	return 0;}/* u_diff2lwc_diff */intoldnew2l_diff(int mindiff, int context, char *ignore, char *old_fn, char *new_fn, char *l_diff_fn){	char u_diff_fn[BUFLEN];	int rtrn = 0;	TRACE(fprintf(STDERR, "oldnew2l_diff(%i,%i,%s,%s,%s,%s)\n", mindiff, context, ignore, old_fn, new_fn, l_diff_fn));	sprintf(u_diff_fn, "%s%c.difflib-%ld-oldnew2l_diff-u_diff", tmpdir(), DIR_SEP, (long) getpid());	if (!oldnew2u_diff(mindiff, context, ignore, old_fn, new_fn, u_diff_fn)) {		UNLINK(u_diff_fn);		ERRHNDL(0, "oldnew2u_diff returns 0 in oldnew2l_diff", "", 1);	}	rtrn = u_diff2l_diff(u_diff_fn, l_diff_fn);	UNLINK(u_diff_fn);	return rtrn;}/* oldnew2l_diff */intoldnew2w_diff(int mindiff, int context, char *ignore, char *old_fn, char *new_fn, char *w_diff_fn){	char l_diff_fn[BUFLEN];	int rtrn = 0;	TRACE(fprintf(STDERR, "oldnew2w_diff(%i,%i,%s,%s,%s,%s)\n", mindiff, context, ignore, old_fn, new_fn, w_diff_fn));	sprintf(l_diff_fn, "%s%c.difflib-%ld-oldnew2w_diff-l_diff", tmpdir(), DIR_SEP, (long) getpid());	if (!oldnew2l_diff(mindiff, context, ignore, old_fn, new_fn, l_diff_fn)) {		UNLINK(l_diff_fn);		ERRHNDL(0, "oldnew2l_diff returns 0 in oldnew2w_diff", "", 1);	}	rtrn = l_diff2w_diff(mindiff, l_diff_fn, w_diff_fn);	UNLINK(l_diff_fn);	return rtrn;}/* oldnew2w_diff */intoldnew2c_diff(int mindiff, int context, char *ignore, char *old_fn, char *new_fn, char *c_diff_fn){	char w_diff_fn[BUFLEN];	int rtrn = 0;	TRACE(fprintf(STDERR, "oldnew2c_diff(%i,%i,%s,%s,%s,%s)\n", mindiff, context, ignore, old_fn, new_fn, c_diff_fn));	sprintf(w_diff_fn, "%s%c.difflib-%ld-oldnew2c_diff-w_diff", tmpdir(), DIR_SEP, (long) getpid());	if (!oldnew2w_diff(mindiff, context, ignore, old_fn, new_fn, w_diff_fn)) {		UNLINK(w_diff_fn);		ERRHNDL(0, "oldnew2w_diff returns 0 in oldnew2c_diff", "", 1);	}	rtrn = w_diff2c_diff(mindiff, w_diff_fn, c_diff_fn);	UNLINK(w_diff_fn);	return rtrn;}/* oldnew2c_diff */intoldnew2lwc_diff(int mindiff, int LWC, int context, char *ignore, char *old_fn, char *new_fn, char *lwc_diff_fn){	TRACE(fprintf(STDERR, "oldnew2lwc_diff(%i,%i,%i,%s,%s,%s,%s)\n", mindiff, LWC, context, ignore, old_fn, new_fn, lwc_diff_fn));	switch (LWC) {	case 0:		return oldnew2l_diff(mindiff, context, ignore, old_fn, new_fn, lwc_diff_fn);	case 1:		return oldnew2w_diff(mindiff, context, ignore, old_fn, new_fn, lwc_diff_fn);	case 2:		return oldnew2c_diff(mindiff, context, ignore, old_fn, new_fn, lwc_diff_fn);	default:		ErrXit("oldnew2lwc_diff called with wrong LWC", "", 1);	}	return 0;}/* oldnew2lwc_diff */intlwc_diff2html(char *old_fn, char *new_fn, char *lwc_diff_fn, char *html_fn, char *caption, char *revision){	FILE *html_fp, *lwc_diff_fp, *clmn_fp[5];	char line[BUFLEN], ln[BUFLEN], fn_clmn[BUFLEN], *clmn_fn[5], c[3], *ok;	char *old = NULL, *new = NULL, *old_time, *new_time, olns[24], nlns[24];	int oln, nln, orn, nrn, i, clr[5], newline, newline_, minor = 0, Minor = 0, Major = 0;	TRACE(fprintf(STDERR, "lwc_diff2html(%s,%s,%s,%s)\n", lwc_diff_fn, html_fn, caption, revision));	lwc_diff_fp = Rfopen(lwc_diff_fn);	if (!(ok = fgets(line, BUFLEN, lwc_diff_fp)))		/*{ fclose(lwc_diff_fp); ERRHNDL(0,"empty file in lwc_diff2html:",lwc_diff_fn,1); } */	{		html_fp = Wfopen(html_fn);/*      fprintf(html_fp,"Content-type: text/html\n\n");*/		fprintf(html_fp, "<HTML>\n<BODY BGCOLOR=#ffffff TEST=#000000 LINK=#00AA00 VLINK=#005500 ALINK=#00ff00>\n");		fprintf(html_fp, "<CENTER>\n<TABLE ALIGN=ABSCENTER BORDER=1 CELLSPACING=0 CELLPADDING=1>\n");		if (*caption)			fprintf(html_fp, "<CAPTION><FONT FACE='helvetica, arial'><B>%s</B></FONT></CAPTION>\n", caption);		fprintf(html_fp, "<TR>");		if (!new_fn)			fprintf(html_fp, "<TH>&nbsp;</TH>");		fprintf(html_fp, "<TH><FONT SIZE=3 COLOR=#0000ff><CODE><A HREF='%s'>%s%s</A></CODE></FONT></TH>", filename(old_fn), filename(old_fn), revision);		fprintf(html_fp, "<TH>&nbsp;</TH>");		if (new_fn)			fprintf(html_fp, "<TH><FONT SIZE=3 COLOR=#ff0000><CODE><A HREF='%s'>%s</A></CODE></FONT></TH>", new_fn, new_fn);		fprintf(html_fp, "</TR>\n");		fprintf(html_fp, "<TR><TH COLSPAN=3 ALIGN=CENTER>No differences.</TH></TR>\n");		fprintf(html_fp, "</TABLE></CENTER>\n");		fprintf(html_fp, "<HR>\n");		fprintf(html_fp, "</BODY>\n</HTML>\n");		fprintf(html_fp, "<!--NoDiffs-->\n");		fflush(html_fp);		fclose(html_fp);		return 0;	}	sprintf(fn_clmn, "%s%c.difflib-%ld-lwc_diff2html-clmn-0-0", tmpdir(), DIR_SEP, (long) getpid());	for (i = 0; i < 5; i++) {		clmn_fn[i] = strdup(fn_clmn);		clmn_fn[i][strlen(clmn_fn[i]) - 3] += i;	}	html_fp = Wfopen(html_fn);/*  fprintf(html_fp,"Content-type: text/html\n\n");*/	fprintf(html_fp, "<HTML>\n<BODY BGCOLOR=#ffffff TEST=#000000 LINK=#00AA00 VLINK=#005500 ALINK=#00ff00>\n");	fprintf(html_fp, "<CENTER>\n<TABLE ALIGN=ABSCENTER BORDER=1 CELLSPACING=0 CELLPADDING=1>\n");	if (*caption)		fprintf(html_fp, "<CAPTION><FONT FACE='helvetica, arial'><B>%s</B></FONT></CAPTION>\n", caption);	line[strlen(line) - 1] = '\0';	while (ok && strncmp(line, "@@ -", 4)) {		if (!strncmp(line, "--- ", 4))			old = strdup(line + 4);		else if (!strncmp(line, "+++ ", 4))			new = strdup(line + 4);		else			fprintf(html_fp, "<TR><TD COLSPAN=7><FONT SIZE=1 COLOR=#000000><CODE>%s</CODE></FONT></TD></TR>\n", HTMLsave(line));		ok = fgets(line, BUFLEN, lwc_diff_fp);		line[strlen(line) - 1] = '\0';	}	old_time = strchr(old, '\t');	*old_time++ = '\0';	new_time = strchr(new, '\t') + 1;	*new_time++ = '\0';#ifdef NATIVE_WIN32	if (!strcmp(strrchr(old, '.'), ".cp"))		*strrchr(old, '.') = '\0';	if (!strcmp(strrchr(new, '.'), ".cp"))		*strrchr(new, '.') = '\0';#endif	fprintf(html_fp, "<TR><TH COLSPAN=3 ALIGN=CENTER><FONT SIZE=3 COLOR=#0000ff><CODE><A HREF='%s'>%s%s</A>\t%s</CODE></FONT></TH>", filename(old), filename(old_fn), revision, old_time);	fprintf(html_fp, "<TH>&nbsp;</TH>");	fprintf(html_fp, "<TH COLSPAN=3 ALIGN=CENTER><FONT SIZE=3 COLOR=#ff0000><CODE><A HREF='%s'>%s</A>\t%s</CODE></FONT></TH></TR>\n", new, new_fn, new_time);	free(old);	free(new);	while (ok) {		for (i = 0; i < 5; i++)			clmn_fp[i] = Wfopen(clmn_fn[i]);		sscanf(line, "@@ -%s +%s @@", olns, nlns);		oln = atoi(olns);		nln = atoi(nlns);		if ((oln > 1) && (nln > 1)) {			fprintf(html_fp, "<TR><TD ALIGN=CENTER><FONT SIZE=1 COLOR=#000000><CODE>...</CODE></FONT></TD>");			fprintf(html_fp, "<TD ALIGN=CENTER><FONT SIZE=1 COLOR=#000000><CODE>...</CODE></FONT></TD>");			fprintf(html_fp, "<TD ALIGN=CENTER><FONT SIZE=1 COLOR=#000000><CODE>...</CODE></FONT></TD>");			fprintf(html_fp, "<TD>&nbsp;</TD>");			fprintf(html_fp, "<TD ALIGN=CENTER><FONT SIZE=1 COLOR=#000000><CODE>...</CODE></FONT></TD>");			fprintf(html_fp, "<TD ALIGN=CENTER><FONT SIZE=1 COLOR=#000000><CODE>...</CODE></FONT></TD>");			fprintf(html_fp, "<TD ALIGN=CENTER><FONT SIZE=1 COLOR=#000000><CODE>...</CODE></FONT></TD></TR>\n");		}		for (i = 0; i < 5; i++)			clr[i] = 0;		orn = nrn = 0;		newline_ = 1;		newline = 1;		sprintf(c, "  ");		while ((ok = fgets(line, BUFLEN, lwc_diff_fp)) && strchr(" -+", line[0])) {			if (line[1] != '\3') {				if (newline_ || newline)					Minor |= (minor = (strchr("#=\n\2", line[1]) ? 1 : 0));				line[strlen(line) - 1] = '\0';				if (line[1] == '\2')					sprintf(line + 1, " ");				if (line[0] == ' ') {					if (newline && (nrn < orn)) {						SETBLUE(1, minor);						SETBLUE(2, minor);						while (nrn < orn) {							fprintf(clmn_fp[1], "%i\n", oln++);							fprintf(clmn_fp[2], "-\n");							fprintf(clmn_fp[3], "&nbsp;\n");							fprintf(clmn_fp[4], "&nbsp;\n");							nrn++;						}					}					SETBLACK(0);					SETBLACK(4);				}				if (line[0] == '-') {					c[0] = '-';					SETBLUE(0, minor);				}				if (line[0] == '+') {					c[1] = '+';					SETRED(4, minor);				}				if (line[1] != '\1') {					if (strchr(" -", line[0])) {						fprintf(clmn_fp[0], "%s", HTMLsave(line + 1));						Major |= (clr[0] & 1);					}					if (strchr(" +", line[0])) {						fprintf(clmn_fp[4], "%s", HTMLsave(line + 1));						Major |= (clr[4] & 1);					}				} else {					if (line[0] == '-') {						fprintf(clmn_fp[0], "\n");						orn++;					}					if (line[0] == '+') {						if (orn > nrn) {							SETPINK(1, minor);							fprintf(clmn_fp[1], "%i\n", oln++);							SETPINK(2, minor);							fprintf(clmn_fp[2], "!\n");							SETPINK(3, minor);							fprintf(clmn_fp[3], "%i\n", nln++);						} else {							SETRED(2, minor);							SETRED(3, minor);							fprintf(clmn_fp[0], "&nbsp;\n");							orn++;							fprintf(clmn_fp[1], "&nbsp;\n");							fprintf(clmn_fp[2], "+\n");							fprintf(clmn_fp[3], "%i\n", nln++);						}						fprintf(clmn_fp[4], "\n");						nrn++;					}					if (line[0] == ' ') {						if (!strncmp(c, "  ", 2)) {							SETBLACK(1);							SETBLACK(3);							fprintf(clmn_fp[2], "&nbsp;\n");						} else {							SETPINK(1, minor);							SETPINK(3, minor);						}						if (!strncmp(c, "-+", 2)) {							SETPINK(2, minor);							fprintf(clmn_fp[2], "!\n");						}						if (!strncmp(c, "- ", 2)) {							SETBLUE(2, minor);							fprintf(clmn_fp[2], "-\n");						}						if (!strncmp(c, " +", 2)) {							SETRED(2, minor);							fprintf(clmn_fp[2], "+\n");						}						fprintf(clmn_fp[1], "%i\n", oln++);						fprintf(clmn_fp[3], "%i\n", nln++);						fprintf(clmn_fp[0], "\n");						fprintf(clmn_fp[4], "\n");					}					sprintf(c, "  ");				}				newline_ = newline;				newline = (line[1] == '\1');			}		}		if (nrn < orn) {			SETBLUE(1, minor);			SETBLUE(2, minor);			while (nrn < orn) {				fprintf(clmn_fp[1], "%i\n", oln++);				fprintf(clmn_fp[2], "-\n");				fprintf(clmn_fp[3], "&nbsp;\n");				fprintf(clmn_fp[4], "&nbsp;\n");				nrn++;			}		}		if (orn < nrn) {			SETRED(2, minor);			SETRED(3, minor);			while (orn < nrn) {				fprintf(clmn_fp[0], "&nbsp;\n");				orn++;				fprintf(clmn_fp[1], "&nbsp;\n");				fprintf(clmn_fp[2], "+\n");				fprintf(clmn_fp[3], "%i\n", nln++);			}		}		for (i = 0; i < 5; i++) {			fflush(clmn_fp[i]);			fclose(clmn_fp[i]);		}		fprintf(html_fp, "<TR>");		i = 1;		fprintf(html_fp, "<TD VALIGN=TOP ALIGN=CENTER><PRE><FONT SIZE=1 COLOR=#000000>");		clmn_fp[i] = Rfopen(clmn_fn[i]);		while (fgets(ln, BUFLEN, clmn_fp[i]))			fprintf(html_fp, "%s", ln);		fclose(clmn_fp[i]);		fprintf(html_fp, "</FONT></PRE></TD>");		i = 0;		fprintf(html_fp, "<TD VALIGN=TOP><PRE><FONT SIZE=1 COLOR=#000000>");		clmn_fp[i] = Rfopen(clmn_fn[i]);		while (fgets(ln, BUFLEN, clmn_fp[i]))			fprintf(html_fp, "%s", ln);		fclose(clmn_fp[i]);		fprintf(html_fp, "</FONT></PRE></TD>");		i = 1;		fprintf(html_fp, "<TD VALIGN=TOP ALIGN=CENTER><PRE><FONT SIZE=1 COLOR=#000000>");		clmn_fp[i] = Rfopen(clmn_fn[i]);		while (fgets(ln, BUFLEN, clmn_fp[i]))			fprintf(html_fp, "%s", ln);		fclose(clmn_fp[i]);		fprintf(html_fp, "</FONT></PRE></TD>");		i = 2;		fprintf(html_fp, "<TD VALIGN=TOP ALIGN=CENTER><PRE><FONT SIZE=1 COLOR=#000000>");		clmn_fp[i] = Rfopen(clmn_fn[i]);		while (fgets(ln, BUFLEN, clmn_fp[i]))			fprintf(html_fp, "%s", ln);		fclose(clmn_fp[i]);		fprintf(html_fp, "</FONT></PRE></TD>");		i = 3;		fprintf(html_fp, "<TD VALIGN=TOP ALIGN=CENTER><PRE><FONT SIZE=1 COLOR=#000000>");		clmn_fp[i] = Rfopen(clmn_fn[i]);		while (fgets(ln, BUFLEN, clmn_fp[i]))			fprintf(html_fp, "%s", ln);		fclose(clmn_fp[i]);		fprintf(html_fp, "</FONT></PRE></TD>");		i = 4;		fprintf(html_fp, "<TD VALIGN=TOP><PRE><FONT SIZE=1 COLOR=#000000>");		clmn_fp[i] = Rfopen(clmn_fn[i]);		while (fgets(ln, BUFLEN, clmn_fp[i]))			fprintf(html_fp, "%s", ln);		fclose(clmn_fp[i]);		fprintf(html_fp, "</FONT></PRE></TD>");		i = 3;		fprintf(html_fp, "<TD VALIGN=TOP ALIGN=CENTER><PRE><FONT SIZE=1 COLOR=#000000>");		clmn_fp[i] = Rfopen(clmn_fn[i]);		while (fgets(ln, BUFLEN, clmn_fp[i]))			fprintf(html_fp, "%s", ln);		fclose(clmn_fp[i]);		fprintf(html_fp, "</FONT></PRE></TD>");		fprintf(html_fp, "</TR>\n");		TRACE(for (i = 0; i < 5; i++) clmn_fn[i][strlen(clmn_fn[i]) - 1]++) ;	}	fprintf(html_fp, "</TABLE></CENTER>\n");	fprintf(html_fp, "<HR>\n");	fprintf(html_fp, "</BODY>\n</HTML>\n");	fprintf(html_fp, "<!--%sDiffs-->\n", Major ? "Major" : (Minor ? "Minor" : "No"));	fflush(html_fp);	fclose(html_fp);	for (i = 0; i < 5; i++) {		UNLINK(clmn_fn[i]);		free(clmn_fn[i]);	}	fclose(lwc_diff_fp);	return (Major ? 2 : (Minor ? 1 : 0));}/* lwc_diff2html */intu_diff2html(int mindiff, int LWC, char *u_diff_fn, char *html_fn, char *caption, char *revision){	char lwc_diff_fn[BUFLEN];	int rtrn;	TRACE(fprintf(STDERR, "u_diff2html(%i,%s,%s,%s,%s)\n", LWC, u_diff_fn, html_fn, caption, revision));	sprintf(lwc_diff_fn, "%s%c.difflib-%ld-u_diff2html-lwc_diff", tmpdir(), DIR_SEP, (long) getpid());	if (!u_diff2lwc_diff(mindiff, LWC, u_diff_fn, lwc_diff_fn))		/* { UNLINK(lwc_diff_fn); ERRHNDL(0,"u_diff2lwc_diff returns 0 in u_diff2html","",1); } */		system(strconcat("touch ", lwc_diff_fn));	rtrn = lwc_diff2html(u_diff_fn, (char *) 0, lwc_diff_fn, html_fn, caption, revision);	UNLINK(lwc_diff_fn);	return rtrn;}/* u_diff2html */intoldnew2html(int mindiff, int LWC, int context, char *ignore, char *old_fn, char *new_fn, char *html_fn, char *caption, char *revision){	char lwc_diff_fn[BUFLEN];	int rtrn;	TRACE(fprintf(STDERR, "oldnew2html(%i,%i,%i,%s,%s,%s,%s,%s,%s)\n", mindiff, LWC, context, ignore, old_fn, new_fn, html_fn, caption, revision));	sprintf(lwc_diff_fn, "%s%c.difflib-%ld-oldnew2html-lwc_diff", tmpdir(), DIR_SEP, (long) getpid());	if (!oldnew2lwc_diff(mindiff, LWC, context, ignore, old_fn, new_fn, lwc_diff_fn))		/* { UNLINK(lwc_diff_fn); ERRHNDL(0,"oldnew2lwc_diff returns 0 in oldnew2html","",1); } */		 system(strconcat("touch ", lwc_diff_fn));	rtrn = lwc_diff2html(old_fn, new_fn, lwc_diff_fn, html_fn, caption, revision);	UNLINK(lwc_diff_fn);	return rtrn;}/* oldnew2u_diff */

⌨️ 快捷键说明

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