shithub: p9-stm32-example-os

ref: f801657f77f3923ec2388c25bdcb036c8019ba89
dir: /print.c/

View raw version
#include	<u.h>
#include	"mem.h"
#include	"dat.h"
#include	"fns.h"
#include	"libkern/kern.h"

#define PRINTSIZE	256

int
sprint(char *s, char *fmt, ...)
{
	int n;
	va_list arg;

	va_start(arg, fmt);
	n = vseprint(s, s+PRINTSIZE, fmt, arg) - s;
	va_end(arg);

	return n;
}

int
print(char *fmt, ...)
{
	int n;
	va_list arg;
	char *t;

	char buf[PRINTSIZE];

	va_start(arg, fmt);
	n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf;
	va_end(arg);

	t = buf;
    for (; ((uint)t - (uint)buf) < n; t++) {
		uart1_putc((int)*t);
	}

	return n;
}

void
serwrite(char *msg, int n)
{
	char buf[PRINTSIZE];
	int c;

	while(n) {
		c = n;
		if(c > (PRINTSIZE - 1))
			c = PRINTSIZE - 1;
		memcpy(buf, msg, c);
		buf[c] = 0;

		print(buf);
		n -= c;
	}
}