static bool proc(const char *dst, int l, int n, int m, int p, int op) { bool ok = false; img *s; int k; if ((n && m && p) || imgargs(dst, &n, &m, &p)) { if ((s = imgopen(dst, l, n, m, p))) { for (k = 0; k < s->p; k++) { float v = 0.0f; switch (op) { case 's': v = op_sum(s, k); break; case 'x': v = op_cmin(s, k); break; case 'X': v = op_cmax(s, k); break; case '0': v = op_rmin(s, k); break; case '1': v = op_rmax(s, k); break; } printf("%e\n", v); } imgclose(s); ok = true; } } else apperr("Failed to guess image parameters"); return ok; }
int main(int argc, char *argv[]) { assert(argc == 2); op_time = strtol(argv[1], NULL, 10); assert(op_time >= 0); debug("Hello client! Got %ld.\n", op_time); control_queue = get_queue(CONTROL_KEY); clients_server_queue = get_queue(CLIENTS_SERVER_KEY); server_clients_queue = get_queue(SERVER_CLIENTS_KEY); pid = getpid(); debug("My pid is %ld.\n", pid); Mesg msg; msg.mesg_type = pid; queue_send(control_queue, (char *) &msg); char buffer[500]; while (fgets(buffer, sizeof buffer, stdin) != NULL) { char op; int n; const char *p = buffer; sscanf(p, "%c%n", &op, &n); p += n; switch (op) { case 'r': op_read(p); break; case 'w': op_write(p); break; case 's': op_sum(p); break; case 'x': op_swap(p); break; } } msg.op = QUIT; queue_send(clients_server_queue, (char *) &msg); return 0; }