ref: d7e016b552696b8f5581f5093f82a598bc0033d6
dir: /qw/sys.c/
#include <u.h>
#include <libc.h>
#include <stdio.h>
#include <thread.h>
#include "quakedef.h"
int svonly;
void *
emalloc(ulong n)
{
	void *p;
	if(p = mallocz(n, 1), p == nil)
		sysfatal("emalloc %r");
	setmalloctag(p, getcallerpc(&n));
	return p;
}
void
Sys_Printf(char *fmt, ...)
{
	char buf[1024];
	char *p;
	va_list arg;
	va_start(arg, fmt);
	vseprint(buf, buf+sizeof(buf), fmt, arg);
	va_end(arg);
	for(p = buf; *p; p++){
		*p &= 0x7f;
		if(*p < 32 && *p != 10 && *p != 13 && *p != 9)
			print("[%02x]", *p);
		else
			print("%c", *p);
	}
}
void
Sys_Error(char *error, ...)
{ 
	char buf[1024], *out;
	va_list arg;
	va_start(arg, error);
	out = vseprint(buf, buf+sizeof(buf), error, arg);
	va_end(arg);
	out = seprint(out, buf+sizeof(buf), "\n");
	write(2, buf, out-buf);
	Host_Shutdown();
	sysfatal("ending.");
}
int
Sys_FileTime(char *path)
{
	uchar bs[1024];
	if(stat(path, bs, sizeof bs) < 0)
		return -1;
	return *((int *)(bs+2+2+4+1+4+8+4+4));	/* mtime[4] */
}
void
Sys_mkdir(char *path)
{
	int d;
	if((d = create(path, OREAD, DMDIR|0777)) < 0)
		fprint(2, "Sys_mkdir:create: %r\n");
	else
		close(d);
}
vlong
flen(int fd)
{
	uchar bs[1024];
	if(fstat(fd, bs, sizeof bs) < 0){
		fprint(2, "flen:fstat: %r\n");
		return -1;
	}
	return *((vlong *)(bs+2+2+4+1+4+8+4+4+4));	/* length[8] */
}
vlong
Sys_FileOpenRead(char *path, int *fd)
{
	if((*fd = open(path, OREAD)) < 0)
		return -1;
	return flen(*fd);
}
int
Sys_FileOpenWrite(char *path)
{
	int fd;
	if((fd = open(path, OREAD|OTRUNC)) < 0)
		sysfatal("Sys_FileOpenWrite:open: %r");
	return fd;
}
double
Sys_DoubleTime(void)
{
	return nanosec()/1000000000.0;
}
void
Sys_HighFPPrecision(void)
{
}
void
Sys_LowFPPrecision(void)
{
}
void
initparm(quakeparms_t *q)
{
	int i;
	memset(q, 0, sizeof *q);
	q->argc = com_argc;
	q->argv = com_argv;
	q->memsize = 16*1024*1024;
	if(i = COM_CheckParm("-mem"))
		q->memsize = atoi(com_argv[i+1]) * 1024*1024;
	if((q->membase = malloc(q->memsize)) == nil)
		sysfatal("initparm:malloc: %r");
}
void
Sys_Quit(void)
{
	Host_Shutdown();
	threadexitsall(nil);
}
void
Sys_Init(void)
{
}