xref: /plan9/sys/src/cmd/disk/kfs/misc.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
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 	va_list arg;
44 
45 
46 	s = buf;
47 	s += sprint(s, "%s %s %d: ", progname, procname, getpid());
48 	va_start(arg, fmt);
49 	s = doprint(s, buf + sizeof(buf) / sizeof(*buf), fmt, arg);
50 	va_end(arg);
51 	*s++ = '\n';
52 	write(2, buf, s - buf);
53 	exits(buf);
54 }
55 
56 #define	SIZE	4096
57 
58 void
59 cprint(char *fmt, ...)
60 {
61 	char buf[SIZE], *out;
62 	va_list arg;
63 
64 	va_start(arg, fmt);
65 	out = doprint(buf, buf+SIZE, fmt, arg);
66 	va_end(arg);
67 	write(cmdfd, buf, (long)(out-buf));
68 }
69 
70 /*
71  * print goes to fd 2 [sic] because fd 1 might be
72  * otherwise preoccupied when the -s flag is given to kfs.
73  */
74 int
75 print(char *fmt, ...)
76 {
77 	char buf[SIZE], *out;
78 	va_list arg;
79 	int n;
80 
81 	va_start(arg, fmt);
82 	out = doprint(buf, buf+SIZE, fmt, arg);
83 	va_end(arg);
84 	n = write(2, buf, (long)(out-buf));
85 	return n;
86 }
87 
88 int
89 fprint(int f, char *fmt, ...)
90 {
91 	char buf[SIZE], *out;
92 	va_list arg;
93 	int n;
94 
95 	va_start(arg, fmt);
96 	out = doprint(buf, buf+SIZE, fmt, arg);
97 	va_end(arg);
98 	n = write(f, buf, (long)(out-buf));
99 	return n;
100 }
101 
102 int
103 sprint(char *buf, char *fmt, ...)
104 {
105 	char *out;
106 	va_list arg;
107 
108 	va_start(arg, fmt);
109 	out = doprint(buf, buf+SIZE, fmt, arg);
110 	va_end(arg);
111 	return out-buf;
112 }
113 
114 void
115 perror(char *msg)
116 {
117 	fprint(2, "%s", msg);
118 }
119