xref: /plan9-contrib/sys/src/cmd/disk/kfs/misc.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include "all.h"
2 
3 extern int cmdfd;
4 
5 Float
6 famd(Float a, int b, int c, int d)
7 {
8 	ulong x, m;
9 
10 	x = (a + b) * c;
11 	m = x % d;
12 	x /= d;
13 	if(m >= d / 2)
14 		x++;
15 	return x;
16 }
17 
18 ulong
19 fdf(Float a, int d)
20 {
21 	ulong x, m;
22 
23 	m = a % d;
24 	x = a / d;
25 	if(m >= d / 2)
26 		x++;
27 	return x;
28 }
29 
30 long
31 belong(char *s)
32 {
33 	uchar *x;
34 
35 	x = (uchar *)s;
36 	return (x[0] << 24) + (x[1] << 16) + (x[2] << 8) + x[3];
37 }
38 
39 void
40 panic(char *fmt, ...)
41 {
42 	char buf[8192], *s;
43 
44 	s = buf;
45 	s += sprint(s, "%s %s %d: ", progname, procname, getpid());
46 	s = doprint(s, buf + sizeof(buf) / sizeof(*buf), fmt, &fmt + 1);
47 	*s++ = '\n';
48 	write(2, buf, s - buf);
49 	exits(buf);
50 }
51 
52 #define	SIZE	4096
53 #define	DOTDOT	(&fmt+1)
54 
55 void
56 cprint(char *fmt, ...)
57 {
58 	char buf[SIZE], *out;
59 
60 	out = doprint(buf, buf+SIZE, fmt, DOTDOT);
61 	write(cmdfd, buf, (long)(out-buf));
62 }
63 
64 int
65 print(char *fmt, ...)
66 {
67 	char buf[SIZE], *out;
68 	int n;
69 
70 	out = doprint(buf, buf+SIZE, fmt, DOTDOT);
71 	n = write(2, buf, (long)(out-buf));
72 	return n;
73 }
74 
75 int
76 fprint(int f, char *fmt, ...)
77 {
78 	char buf[SIZE], *out;
79 	int n;
80 
81 	out = doprint(buf, buf+SIZE, fmt, DOTDOT);
82 	n = write(f, buf, (long)(out-buf));
83 	return n;
84 }
85 
86 int
87 sprint(char *buf, char *fmt, ...)
88 {
89 	char *out;
90 	out = doprint(buf, buf+SIZE, fmt, DOTDOT);
91 	return out-buf;
92 }
93 
94 void
95 perror(char *msg)
96 {
97 	fprint(2, "%s", msg);
98 }
99