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