static void child(int n) { // Only first 2 children participate in first pingpong test cprintf("in child %d\n", n); if (n < 2) { int i; for (i = 0; i < 10; i++) { cprintf("in child %d count %d\n", n, i); while (pingpong != n) pause(); xchg(&pingpong, !pingpong); } sys_ret(); } // Second test, round-robin pingpong between all 4 children int i; for (i = 0; i < 10; i++) { cprintf("in child %d count %d\n", n, i); while (pingpong != n) pause(); xchg(&pingpong, (pingpong + 1) % 4); } sys_ret(); // Only "child 0" (or the proc that thinks it's child 0), trap check... if (n == 0) { assert(recovargs == NULL); trap_check(&recovargs); assert(recovargs == NULL); sys_ret(); } panic("child(): shouldn't have gotten here"); }
int perform_move(struct char_data *ch, int dir, int need_specials_check) { room_rnum was_in; struct follow_type *k, *next; int buildwalk(struct char_data *ch, int dir); if (ch == NULL || dir < 0 || dir >= NUM_OF_DIRS || FIGHTING(ch)) return (0); /* Check for traps */ else if(trap_check(ch, dir) ) return(0); else if ((!EXIT(ch, dir) && !buildwalk(ch, dir)) || EXIT(ch, dir)->to_room == NOWHERE) send_to_char(ch, "Alas, you cannot go that way...\r\n"); else if (EXIT_FLAGGED(EXIT(ch, dir), EX_CLOSED)) { if (EXIT_FLAGGED(EXIT(ch, dir), EX_HIDDEN)) send_to_char(ch, "Alas, you cannot go that way...\r\n"); else { if (EXIT(ch, dir)->keyword) send_to_char(ch, "The %s seems to be closed.\r\n", fname(EXIT(ch, dir)->keyword)); else send_to_char(ch, "It seems to be closed.\r\n"); } } else { if (!ch->followers) return (do_simple_move(ch, dir, need_specials_check)); was_in = IN_ROOM(ch); if (!do_simple_move(ch, dir, need_specials_check)) return (0); for (k = ch->followers; k; k = next) { next = k->next; if ((IN_ROOM(k->follower) == was_in) && (GET_POS(k->follower) >= POS_STANDING || IS_SLEEPWALKING(k->follower))) { act("You follow $N.\r\n", FALSE, k->follower, 0, ch, TO_CHAR); perform_move(k->follower, dir, 1); } } return (1); } return (0); }