dat.c (4449B)
1 /* 2 * Copy me if you can. 3 * by 20h 4 */ 5 6 #include <u.h> 7 #include <libc.h> 8 #include "dat.h" 9 10 char *wdays[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", 0}; 11 char *month[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", 12 "Sep", "Oct", "Nov", "Dec", 0}; 13 14 int 15 fileexists(char *path) 16 { 17 uchar buf[STATMAX]; 18 int fd; 19 20 fd = stat(path, buf, STATMAX); 21 if(fd < 0) 22 return 0; 23 24 close(fd); 25 return 1; 26 } 27 28 void 29 playmp3(char *file) 30 { 31 char cmd[256]; 32 33 if(!fileexists("/dev/audio")) 34 return; 35 36 memset(cmd, 0, 256); 37 strncpy(cmd, file, 255); 38 if(getenv("home") != nil){ 39 snprint(cmd, 255, "%s/audio/%s", getenv("home"), file); 40 if(!fileexists(cmd)) 41 strncpy(cmd, file, 255); 42 } 43 if(!fileexists(cmd)) 44 return; 45 46 if(fork() == 0) 47 execl("/bin/madplay", "madplay", "-Q", cmd, 0); 48 wait(); 49 } 50 51 void * 52 reallocj(void *p, int s, short d) 53 { 54 p = realloc(p, s); 55 if(p == nil) 56 sysfatal("realloc: %r"); 57 58 if(d != 0) 59 memset(p, 0, s); 60 61 return (void *)p; 62 } 63 64 void 65 killproc(int p) 66 { 67 char *e; 68 int fd; 69 70 e = mallocz(65, 2); 71 snprint(e, 64, "/proc/%d/ctl", p); 72 73 fd = open(e, OWRITE); 74 if(fd != -1){ 75 write(fd, "kill", 4); 76 close(fd); 77 } 78 free(e); 79 } 80 81 char * 82 setwindowlbl(char *w) 83 { 84 int s; 85 86 s = open("/dev/label", OWRITE); 87 if(s < 0) 88 return nil; 89 90 write(s, w, strlen(w)); 91 92 close(s); 93 return w; 94 } 95 96 char * 97 getwindowlbl(void) 98 { 99 int s; 100 char *ret; 101 short i; 102 103 s = open("/dev/label", OREAD); 104 if(s < 0) 105 return nil; 106 107 i = 0; 108 ret = malloc(0); 109 while(realloc(ret, ++i) != nil && read(s, &ret[i - 1], 1) > 0 && 110 i < 513); 111 112 ret[i - 1] = '\0'; 113 114 close(s); 115 return ret; 116 } 117 118 char * 119 mktmstmp(char bord, char bord_e) 120 { 121 Tm *tim; 122 char *ret; 123 124 ret = reallocj(nil, 32, 2); 125 tim = localtime(time(0)); 126 snprint(ret, 31, "%c%.2d:%.2d%c ", bord, tim->hour, tim->min, bord_e); 127 128 return ret; 129 } 130 131 char * 132 setchan(char *old, char *new) 133 { 134 old = reallocj(old, strlen(new) + 1, 2); 135 strcpy(old, new); 136 137 return old; 138 } 139 140 char * 141 printjid(char *user, char *serv, char *reso) 142 { 143 char *ret; 144 int i; 145 146 if(user == nil || serv == nil) 147 return nil; 148 149 i = strlen(user) + strlen(serv) + 3 + ((reso != nil) ? strlen(reso) : 0); 150 151 ret = reallocj(nil, i, 2); 152 snprint(ret, i, "%s@%s%s%s", user, serv, (reso != nil) ? "/" : "\0", 153 ((reso != nil) ? reso : "")); 154 155 return ret; 156 } 157 158 char * 159 getarg(char *b, char n, char t) 160 { 161 char *ret, delim; 162 163 ret = nil; 164 165 while(n-- > 0){ 166 if(*b == '\'' || *b == '\"'){ 167 delim = *b; 168 b++; 169 ret = strchr(b, delim); 170 } else 171 ret = strchr(b, ' '); 172 if(ret == nil) 173 return nil; 174 175 b = ret + 1; 176 } 177 178 if(t == 0) 179 b = strchr(ret + 1, ' '); 180 else 181 b = nil; 182 183 if(b == nil) 184 ret = strdup(ret + 1); 185 else { 186 n = *b; 187 *b = '\0'; 188 ret = strdup(ret + 1); 189 *b = n; 190 } 191 192 ret = filterhin(ret, 2); 193 194 return ret; 195 } 196 197 void 198 readwrite(int sock, int fd) 199 { 200 char *b; 201 int l; 202 203 l = 2048; 204 b = reallocj(nil, 2048, 2); 205 while(l == 2048){ 206 l = read(fd, b, 2048); 207 if(l > 0) 208 write(sock, b, l); 209 } 210 211 free(b); 212 return; 213 } 214 215 char * 216 getmonth(int m) 217 { 218 if(m > 11 || m < 0) 219 return nil; 220 221 return month[m]; 222 } 223 224 char * 225 getday(int d) 226 { 227 if(d > 6 || d < 0) 228 return nil; 229 230 return wdays[d]; 231 } 232 233 char * 234 filterhin(char *in, int a) 235 { 236 char *ret, *z; 237 int l; 238 239 l = 0; 240 ret = reallocj(nil, 1, 0); 241 z = in; 242 243 while(*in != '\0'){ 244 switch(*in){ 245 case '<': 246 l += 4; 247 ret = reallocj(ret, l + 1, 0); 248 strncpy(&ret[l - 4], "<", 4); 249 break; 250 case '&': 251 l += 5; 252 ret = reallocj(ret, l + 1, 0); 253 strncpy(&ret[l - 5], "&", 5); 254 break; 255 case '>': 256 l += 4; 257 ret = reallocj(ret, l + 1, 0); 258 strncpy(&ret[l - 4], ">", 4); 259 break; 260 case '"': 261 l += 6; 262 ret = reallocj(ret, l + 1, 0); 263 strncpy(&ret[l - 6], """, 6); 264 break; 265 default: 266 ret = reallocj(ret, ++l + 1, 0); 267 ret[l - 1] = *in; 268 break; 269 } 270 in++; 271 } 272 ret[l] = '\0'; 273 274 if(a != 0) 275 free(z); 276 277 return ret; 278 } 279 280 char * 281 filterzur(char *out) 282 { 283 char *a, *b; 284 int changed; 285 286 changed = 1; 287 288 while(changed){ 289 changed = 0; 290 if((a = strstr(out, "<")) != nil) { 291 *a = '<'; 292 strcpy(a + 1, a + 4); 293 changed = 1; 294 } 295 if((a = strstr(out, ">")) != nil) { 296 *a = '>'; 297 strcpy(a + 1, a + 4); 298 changed = 1; 299 } 300 if((a = strstr(out, """)) != nil) { 301 *a = '"'; 302 strcpy(a + 1, a + 6); 303 changed = 1; 304 } 305 if((a = strstr(out, "&")) != nil) { 306 *a = '&'; 307 strcpy(a + 1, a + 5); 308 changed = 1; 309 } 310 if((a = strstr(out, "text/x-aolrtf;")) != nil) { 311 b = strchr(a, ':'); 312 if(b != nil) { 313 strcpy(a, b + 2); 314 changed = 1; 315 } 316 } 317 } 318 319 return out; 320 }