xref: /plan9/sys/src/cmd/cec/utils.c (revision 68de9c9388a1b0174f2979e40f3c4361793bf05a)
1eba00c11SDavid du Colombier #include <u.h>
2eba00c11SDavid du Colombier #include <libc.h>
3eba00c11SDavid du Colombier #include "cec.h"
4eba00c11SDavid du Colombier 
5eba00c11SDavid du Colombier static	int	fd	= -1;
6*68de9c93SDavid du Colombier extern	char	*svc;
7eba00c11SDavid du Colombier 
8eba00c11SDavid du Colombier void
rawon(void)9eba00c11SDavid du Colombier rawon(void)
10eba00c11SDavid du Colombier {
11*68de9c93SDavid du Colombier 	if(svc)
12*68de9c93SDavid du Colombier 		return;
13eba00c11SDavid du Colombier 	if((fd = open("/dev/consctl", OWRITE)) == -1 ||
14eba00c11SDavid du Colombier 	    write(fd, "rawon", 5) != 5)
15eba00c11SDavid du Colombier 		fprint(2, "Can't make console raw\n");
16eba00c11SDavid du Colombier }
17eba00c11SDavid du Colombier 
18eba00c11SDavid du Colombier void
rawoff(void)19eba00c11SDavid du Colombier rawoff(void)
20eba00c11SDavid du Colombier {
21*68de9c93SDavid du Colombier 	if(svc)
22*68de9c93SDavid du Colombier 		return;
23eba00c11SDavid du Colombier 	close(fd);
24eba00c11SDavid du Colombier }
25eba00c11SDavid du Colombier 
26eba00c11SDavid du Colombier enum {
27eba00c11SDavid du Colombier 	Perline	= 16,
28eba00c11SDavid du Colombier 	Perch	= 3,
29eba00c11SDavid du Colombier };
30eba00c11SDavid du Colombier 
31eba00c11SDavid du Colombier char	line[Perch*Perline+1];
32eba00c11SDavid du Colombier 
33eba00c11SDavid du Colombier static void
format(uchar * buf,int n,int t)34eba00c11SDavid du Colombier format(uchar *buf, int n, int t)
35eba00c11SDavid du Colombier {
36eba00c11SDavid du Colombier 	int i, r;
37eba00c11SDavid du Colombier 
38eba00c11SDavid du Colombier 	for(i = 0; i < n; i++){
39eba00c11SDavid du Colombier 		r = (i + t) % Perline;
40eba00c11SDavid du Colombier 		if(r == 0 && i + t > 0)
41eba00c11SDavid du Colombier 			fprint(2, "%s\n", line);
42eba00c11SDavid du Colombier 		sprint(line + r*Perch, "%.2x ", buf[i]);
43eba00c11SDavid du Colombier 	}
44eba00c11SDavid du Colombier }
45eba00c11SDavid du Colombier 
46eba00c11SDavid du Colombier void
dump(uchar * p,int n)47eba00c11SDavid du Colombier dump(uchar *p, int n)
48eba00c11SDavid du Colombier {
49eba00c11SDavid du Colombier 	format(p, n, 0);
50eba00c11SDavid du Colombier 	if(n % 16 > 0)
51eba00c11SDavid du Colombier 		print("%s\n", line);
52eba00c11SDavid du Colombier }
53