Metropoli BBS
VIEWER: mvcp.c MODE: TEXT (ASCII)
#include <stdio.h>
#include <signal.h>
/*
 * mvcp.c - routines common to mv and cp
 */
#include <fcntl.h>
typedef char cpbuf[BUFSIZ*16];
extern char *me;
int filecopy(target,source)
char *target,*source;
{
	void (*oldsig)();
	void *malloc();
	cpbuf *buffer;
    int t,s,r;
	void (*signal())();
	oldsig = signal(SIGINT,SIG_IGN);
	if (NULL == (buffer=malloc(sizeof(cpbuf))))
	{
		perror(me);
		return -1;
	}
    if (-1 == (s = open(source,O_RDONLY)))
    {
		fprintf(stderr,"%s : can't open %s\n",me,source);
		return(-1);
    }
    if (-1 == (t = open(target,O_TRUNC)))
    {
		fprintf(stderr,"%s : can't open %s\n",me,target);
		return(-1);
    }
    while(0 != (r = read(s,buffer,BUFSIZ*16)) && r != -1)
    {
		if(-1 == write(t,buffer,r))
		{
		    fprintf(stderr,"%s : error writing %s\n",me,target);
		    return(-1);
		}
    }
    close(t); 
    close(s);
	free(buffer);
	(void)signal(SIGINT,oldsig);
	return (0);
}

#include <errno.h>
typedef struct
{
    char dos_reserved[21];
    char attribute;
    unsigned file_time;
    unsigned file_date;
    long file_size;
    char file_name[13];
} 
fcb;
fcb dir;
/*lint -e529 */
int dirp(s)
char *s;
{
	register int junk1,junk2;
	/* handle all of the stupid special cases */
	if ((s[1] == ':' && s[2] == '\0')	/* root directory on a drive */
		|| (s[1] == '\0')				/* root directory default drive */
		|| (s[0] == '.' && s[1] == '\0')
	)
	{
		return 1;
	}
	if (0 == strcmp(s,".."))			/* parent of this directory */
	{
		int returnval;
		char *current,*parent,*getcwd();
		current = getcwd(NULL,64);
		if (-1 == chdir(s)) /* go to parent */
			returnval = 0;
		else
			returnval = 1;
		parent = getcwd(NULL,64);
		(void)chdir(current);
		free(current); free(parent);
		return returnval;
	}
    /* set the disk transfer address */
    bdos(0x1A,&dir);
    /* do a search first for the directory path */
    return (bdos(0x4E,s,0x10) == 0 && bdos(0x4E,s,0) != 0);
}
/*lint +e529 */	
int filep(s)
char *s;
{
    /* set the disk transfer address */
    bdos(0x1A,&dir);
    /* do a search first for the directory path */
    return bdos(0x4E,s,0) == 0;
}
char *fname_part(s)
register char *s;
{
    register char *r; 
    char *rindex();
    if ((r = rindex(s,'/')) || (r = rindex(s,'\\')))
	{
		return r+1;
	}
    if (r = rindex(s,':'))
	{
		return r+1;
	}
    return s;
}
char *path_part(s)
register char *s;
{
	static char buffer[64];
    register char *r; 
    char *rindex();
	strcpy(buffer,s);	/* copy string */
	if ((r = rindex(buffer,'/')) ||
		(r = rindex(buffer,'\\')))
	{
		*++r = '\0';
		return buffer;
	}

	if (r = rindex(buffer,':'))
	{
		*++r = '\0';
		return buffer;
	}
	return NULL;
}
char *drive_part(s)
register char *s;
{
	static char buffer[64];
    char *rindex();
	strcpy(buffer,s);	/* copy string */
	if (buffer[1] == ':')
	{
		buffer[2] = '\0';
		return buffer;
	}
	return NULL;
}
[ RETURN TO DIRECTORY ]