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

📄 editmf.c

📁 早期freebsd实现
💻 C
字号:
/* * Copyright (c) 1983, 1985, 1991, 1993 Peter J. Nicklin. * Copyright (c) 1991, 1993 Version Technology. * All Rights Reserved. * * $License: VT.1.1 $ * Redistribution and use in source and binary forms,  with or without * modification,  are permitted provided that the following conditions * are met:  (1) Redistributions of source code must retain the  above * copyright  notice,  this  list  of  conditions  and  the  following * disclaimer.  (2) Redistributions in binary form must reproduce  the * above  copyright notice,  this list of conditions and the following * disclaimer in the  documentation  and/or other  materials  provided * with  the  distribution.  (3) All advertising materials  mentioning * features or  use  of  this  software  must  display  the  following * acknowledgement:  ``This  product  includes  software  developed by * Version Technology.''  Neither the name of Version  Technology  nor * the  name  of  Peter J. Nicklin  may  be used to endorse or promote * products derived from this software without specific prior  written * permission. * * THIS SOFTWARE IS PROVIDED BY VERSION TECHNOLOGY ``AS IS''  AND  ANY * EXPRESS OR IMPLIED WARRANTIES,  INCLUDING,  BUT NOT LIMITED TO, THE * IMPLIED  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL  VERSION  TECHNOLOGY  BE * LIABLE  FOR ANY DIRECT,  INDIRECT,  INCIDENTAL, SPECIAL, EXEMPLARY, * OR  CONSEQUENTIAL DAMAGES   (INCLUDING,   BUT   NOT   LIMITED   TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF  LIABILITY,  WHETHER  IN  CONTRACT,  STRICT LIABILITY,  OR  TORT * (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING  IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE,  EVEN  IF  ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * Report problems and direct questions to nicklin@netcom.com * * $Header: editmf.c,v 4.6 93/05/25 21:49:09 nicklin Exp $ * * Author: Peter J. Nicklin */#include <ctype.h>#include <signal.h>#include <stdio.h>#include "Mkmf.h"#include "config.h"#include "dlist.h"#include "hash.h"#include "macro.h"#include "null.h"#include "slist.h"#include "yesno.h"static char Mftemp[] = "mkmfXXXXXX";		/* temporary makefile *//* * editmf() replaces macro definitions within a makefile. */voideditmf(mfname, mfpath)	char *mfname;			/* makefile name */	char *mfpath;			/* makefile template pathname */{	extern char IOBUF[];		/* I/O buffer line */	extern int DEPEND;		/* dependency analysis? */	extern SLIST *EXTLIST;		/* external header file name list */	extern SLIST *HEADLIST;		/* header file name list */	extern SLIST *LIBLIST;		/* library pathname list */	extern SLIST *SRCLIST;		/* source file name list */	extern SLIST *SYSLIST;		/* system header file name list */	extern HASH *MDEFTABLE;		/* macro definition table */	char *findmacro();		/* is the line a macro definition? */	char *getlin();			/* get a line from input stream */	char *mktemp();			/* make file name */	char mnam[MACRONAMSIZE];	/* macro name buffer */	DLIST *dlp;			/* dependency list */	DLIST *mkdepend();		/* generate object-include file deps */	FILE *ifp;			/* input stream */	FILE *mustfopen();		/* must open file or die */	FILE *ofp;			/* output stream */	HASHBLK *htb;			/* hash table block */	HASHBLK *htlookup();		/* find hash table entry */	void cleanup();			/* remove temporary makefile and exit */	void dlprint();			/* print dependency list */	void purgcontinue();		/* get rid of continuation lines */	void putmacro();		/* put macro defs from table */	void putlin();			/* put a makefile line */	void putobjmacro();		/* put object file name macro def */	void putslmacro();		/* put macro defs from linked list */	ifp = mustfopen(mfpath, "r");	mktemp("Mftemp");	if (signal(SIGINT, SIG_IGN) != SIG_IGN)		{		signal(SIGINT, cleanup);		signal(SIGHUP, cleanup);		signal(SIGQUIT, cleanup);		}	ofp = mustfopen(Mftemp, "w");	if (DEPEND)		{		dlp = mkdepend();		}	while (getlin(ifp) != NULL)		{		if (DEPEND && EQUAL(IOBUF, DEPENDMARK))			break;		if (findmacro(mnam, IOBUF) != NULL)			{			if (EQUAL(mnam, MHEADERS))				{				putslmacro(HEADLIST, ofp);				purgcontinue(ifp);				}			else if (EQUAL(mnam, MOBJECTS))				{				putobjmacro(ofp);				purgcontinue(ifp);				}			else if (EQUAL(mnam, MSOURCES))				{				putslmacro(SRCLIST, ofp);				purgcontinue(ifp);				}			else if (EQUAL(mnam, MSYSHDRS))				{				putslmacro(SYSLIST, ofp);				purgcontinue(ifp);				}			else if (EQUAL(mnam, MEXTERNALS))				{				if (DEPEND)					{					putslmacro(EXTLIST, ofp);					purgcontinue(ifp);					}				else	{					putlin(ofp);					}				}			else if (EQUAL(mnam, MLIBLIST) && LIBLIST != NULL)				{				putslmacro(LIBLIST, ofp);				purgcontinue(ifp);				}			else if ((htb = htlookup(mnam, MDEFTABLE)) != NULL)				{				if (htb->h_val == VREADWRITE)					{					putmacro(htb->h_def, ofp);					purgcontinue(ifp);					}				else	{					putlin(ofp);					}				}			else	{				putlin(ofp);				}			}		else	{			putlin(ofp);			}		}	fclose(ifp);	if (DEPEND)		{		dlprint(dlp, ofp);		}	fclose(ofp);	signal(SIGINT, SIG_IGN);	signal(SIGHUP, SIG_IGN);	signal(SIGQUIT, SIG_IGN);	RENAME(Mftemp, mfname);}/* * cleanup() removes the temporary makefile and dependency file, and * calls exit(1). */voidcleanup(sig)	int sig;			/* value of signal causing cleanup */{	signal(SIGINT, cleanup);	signal(SIGHUP, cleanup);	signal(SIGQUIT, cleanup);	unlink(Mftemp);	exit(1);}

⌨️ 快捷键说明

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