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