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

📄 arcrun.c

📁 汇编源代码大全
💻 C
字号:
/* * $Header: arcrun.c,v 1.3 88/06/01 19:57:16 hyc Locked $ *//* * ARC - Archive utility - ARCRUN *  * Version 1.20, created on 03/24/86 at 19:34:31 *  * (C) COPYRIGHT 1985,85 by System Enhancement Associates; ALL RIGHTS RESERVED *  * By:  Thom Henderson *  * Description: This file contains the routines used to "run" a file which is * stored in an archive.  At present, all we really do is (a) extract a * temporary file, (b) give its name as a system command, and then (c) delete * the file. *  * Language: Computer Innovations Optimizing C86 */#include <stdio.h>#include "arc.h"void	rempath(), openarc(), closearc(), abort();char	*strcat();voidrunarc(num, arg)		/* run file from archive */	int             num;	/* number of arguments */	char           *arg[];	/* pointers to arguments */{	struct heads    hdr;	/* file header */	char           *makefnam();	/* filename fixer */	char            buf[STRLEN];	/* filename buffer */	FILE           *fopen();/* file opener */	int             runfile();	char	       *dummy[2];	dummy[0]="dummy";	dummy[1]=NULL;	rempath(num, arg);	/* strip off paths */	openarc(0);		/* open archive for reading */	if (num) {		/* if files were named */		while (readhdr(&hdr, arc)) {	/* while more files to check */			if (match(hdr.name, makefnam(arg[0], ".*", buf)))				runfile(&hdr, num, arg);			else				fseek(arc, hdr.size, 1);		}	} else		while (readhdr(&hdr, arc))	/* else run all files */			runfile(&hdr, 1, dummy);	closearc(0);		/* close archive after changes */}static          intrunfile(hdr, num, arg)		/* run a file */	struct heads   *hdr;	/* pointer to header data */	int             num;	/* number of arguments */	char           *arg[];	/* pointers to arguments */{	FILE           *tmp, *fopen();	/* temporary file */	char           *dir, *gcdir();	/* directory stuff */	char            buf[STRLEN], *makefnam();	/* temp file name, fixer */#if	DOS	char		nbuf[64], *i, *rindex();#endif#if	!GEMDOS	int             n;	/* index */	char            sys[STRLEN];	/* invocation command buffer */#endif	/* makefnam("$ARCTEMP",hdr->name,buf); */#if	UNIX	sprintf(buf, "%s.RUN", arctemp);	strcpy(sys, buf);#else	strcpy(nbuf, arctemp);	makefnam(nbuf,hdr->name,buf);	i = rindex(buf,'.');#endif#if	MSDOS	if (!strcmp(i, ".BAS")) {		strcpy(sys, "BASICA ");		strcat(sys, buf);	}	else if (!strcmp(i, ".BAT")		 || !strcmp(i, ".COM")		 || !strcmp(i, ".EXE"))		strcpy(sys, buf);	else {		if (warn) {			printf("File %s is not a .BAS, .BAT, .COM, or .EXE\n",			       hdr->name);			nerrs++;		}		fseek(arc, hdr->size, 1);	/* skip this file */		return;	}#endif#if	GEMDOS      if (strcmp(i, ".PRG")              && strcmp(i, ".TTP")              && strcmp(i, ".TOS"))      {              if (warn) {                      printf("File %s is not a .PRG, .TOS, or .TTP\n",                              hdr->name);                      nerrs++;              }              fseek(arc, hdr->size, 1);       /* skip this file */              return;      }#endif	if (warn)		if (tmp = fopen(buf, "r"))			abort("Temporary file %s already exists", buf);	if (!(tmp = fopen(buf, "wb")))		abort("Unable to create temporary file %s", buf);	if (note)		printf("Invoking file: %s\n", hdr->name);	dir = gcdir("");	/* see where we are */	unpack(arc, tmp, hdr);	/* unpack the entry */	fclose(tmp);		/* release the file */	chmod(buf, "700");	/* make it executable */#if	GEMDOS	execve(buf, arg, NULL);#else	for (n = 1; n < num; n++) {	/* add command line arguments */		strcat(sys, " ");		strcat(sys, arg[n]);	}	system(buf);		/* try to invoke it */#endif	chdir(dir);	free(dir);		/* return to whence we started */	if (unlink(buf) && warn) {		printf("Cannot unsave temporary file %s\n", buf);		nerrs++;	}}

⌨️ 快捷键说明

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