summaryrefslogtreecommitdiffstats
path: root/jacs/dat.c
blob: 094f27f6ddc4fbd72d87bdd59af319c12ce69b0c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
 * Copy me if you can.
 * by 20h
 */

#include <u.h>
#include <libc.h>
#include "dat.h"

void *
reallocj(void *p, int s, short d)
{
	p = realloc(p, s);
	if(p == nil)
		sysfatal("realloc: %r");

	if(d != 0)
		memset(p, 0, s);

	return (void *)p;
}

char *
setwindowlbl(char *w)
{
	int s;

	s = open("/dev/label", OWRITE);
	if(s < 0)
		return nil;

	write(s, w, strlen(w));

	close(s);
	return w;
}

char *
getwindowlbl(void)
{
	int s;
	char *ret;
	short i;

	s = open("/dev/label", OREAD);
	if(s < 0)
		return nil;

	i = 0;
	ret = malloc(0);
	while(realloc(ret, ++i) != nil && read(s, &ret[i - 1], 1) > 0 &&
			i < 513);

	ret[i - 1] = '\0';

	close(s);
	return ret;
}

char *
mktmstmp(char bord, char bord_e)
{
	Tm *tim;
	char *ret;

	ret = reallocj(nil, 32, 2);
	tim = localtime(time(0));
	snprint(ret, 31, "%c%.2d:%.2d%c ", bord, tim->hour, tim->min, bord_e);

	return ret;
}

char *
printjid(char *user, char *serv, char *reso)
{
	char *ret;
	int i;

	if(user == nil || serv == nil)
		return nil;

	i = strlen(user) + strlen(serv) + 3 + ((reso != nil) ? strlen(reso) : 0);

	ret = reallocj(nil, i, 2);
	snprint(ret, i, "%s@%s%s%s", user, serv, (reso != nil) ? "/" : "\0",
				((reso != nil) ? reso : ""));

	return ret;
}