/* * Copyright 2007, Axel Dörfler, axeld@pinc-software.de. All rights reserved. * Distributed under the terms of the MIT License. * * Copyright 2002, Manuel J. Petit. All rights reserved. * Distributed under the terms of the NewOS License. */ #include #include #include #include static void usage(char const *app) { printf("usage: %s [-s] ###\n", app); exit(-1); } int main(int argc, char *argv[]) { bool silent = false; int num = 0; int result; switch (argc) { case 2: num = atoi(argv[1]); break; case 3: if (!strcmp(argv[1], "-s")) { num = atoi(argv[2]); silent = true; break; } // supposed to fall through default: usage(argv[0]); break; } if (num < 2) { result = 1; } else { char buffer[64]; char* args[]= { argv[0], "-s", buffer, NULL }; int argCount = 3; status_t status; snprintf(buffer, sizeof(buffer), "%d", num - 1); thread_id threadA = load_image(argCount, (const char**)args, (const char**)environ); if (threadA < B_OK) { fprintf(stderr, "Could not create thread A: %s\n", strerror(threadA)); return -1; } snprintf(buffer, sizeof(buffer), "%d", num - 2); thread_id threadB = load_image(argCount, (const char**)args, (const char**)environ); if (threadB < B_OK) { fprintf(stderr, "Could not create thread B: %s\n", strerror(threadB)); return -1; } resume_thread(threadA); resume_thread(threadB); while (wait_for_thread(threadA, &status) == B_INTERRUPTED) ; result = status; while (wait_for_thread(threadB, &status) == B_INTERRUPTED) ; result += status; } if (silent) { return result; } else { printf("%d\n", result); return 0; } }