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

📄 arcmisc.c

📁 汇编源代码大全
💻 C
字号:
/* * Miscellaneous routines to get ARC running on non-MSDOS systems... * $Header: arcmisc.c,v 1.7 88/06/12 19:23:13 hyc Locked $  */#include <stdio.h>#include <ctype.h>#include "arc.h"#if	MSDOS#include <dir.h>#include <stat.h>#endif#if	GEMDOS#include <osbind.h>#include <stat.h>char           *index(), *rindex();void exitpause(){	while (Cconis())		Cnecin();	fprintf(stderr, "Press any key to continue: ");	fflush(stderr);	Cnecin();	fprintf(stderr, "\n");}intchdir(dirname)	char           *dirname;{	char           *i;	int             drv;	i = dirname;	if ((i = index(dirname, ':')) != NULL) {		drv = i[-1];		i++;		/* Move past device spec */		if (drv > '\'')			drv -= 'a';		else			drv -= 'A';		if (drv >= 0 && drv < 16)			Dsetdrv(drv);	}	if (*i != '\0')		return (Dsetpath(i));}#endif#if	UNIX#include <sys/types.h>#include <sys/dir.h>#include <sys/stat.h>	int	rename();#endif#if	SYSV#include <dirent.h>#define DIRECT dirent#else#define DIRECT direct#endifchar           *strcpy(), *strcat(), *malloc();int             strlen();intmove(oldnam, newnam)	char           *oldnam, *newnam;{	FILE           *fopen(), *old, *new;	struct stat     oldstat;	char           *strcpy();	void		filecopy();#if	GEMDOS	if (Frename(0, oldnam, newnam))#else	if (rename(oldnam, newnam))#endif	{		if (stat(oldnam, &oldstat))	/* different partition? */			return (-1);		old = fopen(oldnam, "rb");		if (old == NULL)			return (-1);		new = fopen(newnam, "wb");		if (new == NULL)			return (-1);		filecopy(old, new, oldstat.st_size);		unlink(oldnam);	}	return 0;}static void_makefn(source, dest)	char           *source;	char           *dest;{	int             j;#if	MSDOS	char	       *setmem();#else	char	       *memset();#endif	setmem(dest, 17, 0);	/* clear result field */	for (j = 0; *source && *source != '.'; ++source)		if (j < 8)			dest[j++] = *source;	for (j = 9; *source; ++source)		if (j < 13)			dest[j++] = *source;}/* * make a file name using a template  */char           *makefnam(rawfn, template, result)	char           *rawfn;	/* the original file name */	char           *template;	/* the template data */	char           *result;	/* where to place the result */{	char            et[17], er[17], rawbuf[STRLEN], *i, *rindex();	*rawbuf = 0;	strcpy(rawbuf, rawfn);#if	MTS	i = rawbuf;	if (rawbuf[0] == tmpchr[0]) {		i++;		strcpy(rawfn, i);	} else#endif	if ((i = rindex(rawbuf, CUTOFF))) {		i++;		strcpy(rawfn, i);	}#if	DOS	else if ((i = rindex(rawbuf, ':'))) {		i++;		strcpy(rawfn, i);	}#endif	if (i)		*i = 0;	else		*rawbuf = 0;	_makefn(template, et);	_makefn(rawfn, er);	*result = 0;		/* assure no data */	strcat(result, rawbuf);	strcat(result, er[0] ? er : et);	strcat(result, er[9] ? er + 9 : et + 9);	return ((char *) &result[0]);}#if	MSDOS || SYSVintalphasort(dirptr1, dirptr2)	struct DIRECT **dirptr1, **dirptr2;{	return (strcmp((*dirptr1)->d_name, (*dirptr2)->d_name));}#endifvoidupper(string)	char           *string;{	char           *p;	for (p = string; *p; p++)		if (islower(*p))			*p = toupper(*p);}/* VARARGS1 */voidabort(s, arg1, arg2, arg3)	char           *s;{	fprintf(stderr, "ARC: ");	fprintf(stderr, s, arg1, arg2, arg3);	fprintf(stderr, "\n");#if	UNIX	perror("UNIX");#endif#if	GEMDOS	exitpause();#endif	exit(1);}#if	!MTSchar           *gcdir(dirname)	char           *dirname;{	char           *getwd();#if	GEMDOS	int             drv;	char           *buf;#endif	if (dirname == NULL || strlen(dirname) == 0)		dirname = (char *) malloc(1024);#if	!GEMDOS	getwd(dirname);#else	buf = dirname;	*buf++ = (drv = Dgetdrv()) + 'A';	*buf++ = ':';	Dgetpath(buf, 0);#endif	return (dirname);}#if	UNIXchar           *pattern;	/* global so that fmatch can use it */#endifchar           *dir(filename)		/* get files, one by one */	char           *filename;	/* template, or NULL */{#if	GEMDOS	static int      Nnum = 0;	static DMABUFFER dbuf, *saved;	char           *name;	if (Nnum == 0) {	/* first call */		saved = (DMABUFFER *) Fgetdta();		Fsetdta(&dbuf);		if (Fsfirst(filename, 0) == 0) {			name = malloc(FNLEN);			strcpy(name, dbuf.d_fname);			Nnum++;			return (name);		} else {			Fsetdta(saved);			return (NULL);		}	} else {		if (Fsnext() == 0) {			name = malloc(FNLEN);			strcpy(name, dbuf.d_fname);			return (name);		} else {			Nnum = 0;			Fsetdta(saved);			return (NULL);		}	}}#else	static struct DIRECT **namelist;	static char   **NameList;	static char	namecopy[STRLEN], *dirname;#if	UNIX	int             alphasort();	int             scandir();#endif				/* UNIX */	int             fmatch();	static int      Nnum = 0, ii;	char		*rindex();	if (Nnum == 0) {	/* first call */		strcpy(namecopy,filename);		if(pattern=rindex(namecopy,CUTOFF)) {			*pattern = 0;			pattern++;			dirname = namecopy;		} else {			pattern = filename;			dirname = ".";		}		Nnum = scandir(dirname, &namelist, fmatch, alphasort);		NameList = (char **) malloc(Nnum * sizeof(char *));		for (ii = 0; ii < Nnum; ii++) {			(NameList)[ii] = malloc(strlen(namelist[ii]->d_name) + 1);			strcpy((NameList)[ii], namelist[ii]->d_name);		}		ii = 0;	}	if (ii >= Nnum) {	/* all out of files */		if (Nnum) {	/* there were some files found */			for (ii = 0; ii < Nnum; ii++)				free(namelist[ii]);			free(namelist);		}		Nnum = 0;		return (NULL);	} else {		return ((NameList)[ii++]);	}}/* * Filename match - here, * matches everything  */intfmatch(direntry)	struct DIRECT  *direntry;{	char           *string;	string = direntry->d_name;	if (!strcmp(pattern, "") || !strcmp(pattern, "*.*") || !strcmp(pattern, "*"))		return (1);	return (match(string, pattern));}#endif				/* GEMDOS */#else/* dir code for MTS under Bell Labs C... */char           *dir(filepattern)	char           *filepattern;	/* template or NULL */{	char           *malloc(), *index();#if	USECATSCAN	fortran void    catscan(), fileinfo();	struct catname {		short           len;		char            name[257];	}               pattern;	struct catval {		int             maxlen;		int             actlen;		char            name[257];	}               catreturn;	char           *i;	int             j, RETCODE;	static int      catptr = 0;	static int      catflag = 0x200;	static int      cattype = 1;	static int      patflag = 0;	catreturn.maxlen = 256;	if (patflag) {		patflag = 0;		catptr = 0;		return (NULL);	}	if (filepattern) {		strcpy(pattern.name, filepattern);		pattern.len = strlen(filepattern);		if (!index(filepattern, '?'))			patflag = 1;	}	if (patflag) {		fileinfo(&pattern, &cattype, "CINAME  ", &catreturn, _retcode RETCODE);		catptr = RETCODE ? 0 : 1;	} else		catscan(&pattern, &catflag, &cattype, &catreturn, &catptr);	if (!catptr)		return (NULL);	else {		char           *k;		k = index(catreturn.name, ' ');		if (k)			*k = 0;		else {			j = catreturn.actlen;			catreturn.name[j] = 0;		}		k = catreturn.name;		if (catreturn.name[0] == tmpchr[0])			k++;		else if ((k = index(catreturn.name, sepchr[0])))			k++;		else			k = catreturn.name;		j = strlen(k);		i = malloc(++j);		strcpy(i, k);		return (i);	}#else	fortran void    gfinfo();	static char     gfname[24];	static char     pattern[20];	static int      gfdummy[2] = {				      0, 0	},              gfflags;	int             i, RETCODE;	char           *j, *k;	if (filepattern) {		strcpy(pattern, filepattern);		strcat(pattern, " ");		for (i = 20; i < 24; i++)			gfname[i] = '\0';		if (index(pattern, '?'))			gfflags = 0x0C;		else			gfflags = 0x09;	} else if (gfflags == 0x09)		return (NULL);	gfinfo(pattern, gfname, &gfflags, gfdummy, gfdummy, gfdummy, _retcode RETCODE);	if (RETCODE)		return (NULL);	else {		k = index(gfname, ' ');		*k = '\0';		k = gfname;		if (gfname[0] == tmpchr[0])			k++;		else if ((k = index(gfname, sepchr[0])))			k++;		else			k = gfname;		i = strlen(k);		j = malloc(++i);		strcpy(j, k);		return (j);	}#endif}intunlink(path)	char           *path;	/* name of file to delete */{	fortran void    destroy();	int             RETCODE;	char            name[258];	strcpy(name, path);	strcat(name, " ");	destroy(name, _retcode RETCODE);	if (RETCODE)		return (-1);	else		return (0);}#endif

⌨️ 快捷键说明

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