/* CPM68K.C	This is the CP/M-68K specialized routines.

	Copyright 1982 by Mark of the Unicorn, Inc.

	These imitate all the BDS C functions which the Digital Research
supplied C compiler doesn't have (those which we use, that is). */

/* Notice we DON'T include mince.gbl. */

bios(call,arg)					/* Do a BIOS call on CP/M-68K
							This is a hack because it will
							not accomodate all call forms,
							because "arg" is a char type.
							Done through *BDOS* call #50,
							recommended in DR documentation */
	int call;
	char arg;
{
	struct {					/* BPB: BIOS Parameter Block */
		int fnum;
		long p1, p2;
		} bpb;
	int retcode;

	bpb.fnum=call;
	bpb.p1=arg;
	retcode=__BDOS(50,&bpb);
	return(retcode);
}

Xread(fd,buffer,bytes)
	int	fd;
	char	*buffer;
	int	bytes;
{
	return(read(fd,buffer,bytes*128));
}

Xwrite(fd,buffer,bytes)
	int	fd;
	char	*buffer;
	int	bytes;
{
	return(write(fd,buffer,bytes*128));
}

Xopen(name,mode)
	char	*name;
	int	mode;
{
	return(openb(name,mode));
}

Xcreat(name,mode)
	char	*name;
	int	mode;
{
	return(creatb(name,mode));
}

seek(fd,offset,ptrname)
	int	fd;
	int	offset;
	int	ptrname;
{
	long	roffset;
	long lseek();

	roffset=offset;
	roffset=lseek(fd,roffset*128,ptrname);
	if (roffset<0) return(-1); else return(0);
}

int isalpha(c)
	char	c;
{
	return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
}

int isspace(c)
	char	c;
{
	return (c == '\040' || c == '\011' || c == '\012' || c == '\015');
}

int tolower(c)
	char	c;
{
	return (isupper(c) ? c-'A'+'a' : c);
}

int toupper(c)
	char	c;
{
	return (islower(c) ? c-'a'+'A' : c);
}

int isupper(c)
	char	c;
{
	return (c >= 'A' && c <= 'Z');
}

int islower(c)
	char c;
{
	return (c >= 'a' && c <= 'z');
}

int isdigit(c)
	char c;
{
	return (c>='0' && c<='9');
}

inp(n)
	int n;
{
	return(0);
	}

outp(n)
	int n;
{
	return(0);
	}

kbhit()
{
	return(bios(2));
	}

setmem(addr,count,byte)
	char *addr, byte;
	int count;
{
	while (count--) *addr++=byte;
	}

movmem(source, dest, count)
	char *source, *dest;
	int count;
{
	if (source > dest)
		while (count--) *dest++ = *source++;
	else {
		source+=count;
		dest+=count;
		while (count--) *--dest = *--source;
		}
	}


/* END OF CPM68K.C - CP/M-68K special routines */
