static void canned_panel(PANEL * px[MAX_PANELS + 1], NCURSES_CONST char *cmd) { int which = cmd[1] - '0'; saywhat(cmd); switch (*cmd) { case 'h': hide_panel(px[which]); break; case 's': show_panel(px[which]); break; case 't': top_panel(px[which]); break; case 'b': bottom_panel(px[which]); break; case 'd': rmpanel(px[which]); break; } pflush(); wgetch(stdscr); }
static void do_panel(PANEL * px[MAX_PANELS + 1], NCURSES_CONST char *cmd, FillPanel myFill) { int which = cmd[1] - '0'; if (which < 1 || which > MAX_PANELS) { beep(); return; } if (log_in != 0) { pflush(); } saywhat(cmd); switch (*cmd) { case 'b': my_bottom_panel(px[which]); break; case 'c': my_create_panel(px, which, myFill); break; case 'd': my_remove_panel(px, which); break; case 'h': my_hide_panel(px[which]); break; case 'm': my_move_panel(px, which, FALSE); break; case 'M': my_move_panel(px, which, TRUE); break; case 'r': my_resize_panel(px, which, myFill); break; case 's': my_show_panel(px[which]); break; case 't': my_top_panel(px[which]); break; } }
initialize() { register struct File *fp; register struct ship *sp; char captain[80]; char message[60]; int load; register int n; char *nameptr; int nat[NNATION]; if (game < 0) { (void) puts("Choose a scenario:\n"); (void) puts("\n\tNUMBER\tSHIPS\tIN PLAY\tTITLE"); for (n = 0; n < NSCENE; n++) { /* ( */ printf("\t%d):\t%d\t%s\t%s\n", n, scene[n].vessels, sync_exists(n) ? "YES" : "no", scene[n].name); } reprint: printf("\nScenario number? "); (void) fflush(stdout); (void) scanf("%d", &game); while (getchar() != '\n') ; } if (game < 0 || game >= NSCENE) { (void) puts("Very funny."); exit(1); } cc = &scene[game]; ls = SHIP(cc->vessels); for (n = 0; n < NNATION; n++) nat[n] = 0; foreachship(sp) { if (sp->file == NULL && (sp->file = (struct File *)calloc(1, sizeof (struct File))) == NULL) { (void) puts("OUT OF MEMORY"); exit(1); } sp->file->index = sp - SHIP(0); sp->file->stern = nat[sp->nationality]++; sp->file->dir = sp->shipdir; sp->file->row = sp->shiprow; sp->file->col = sp->shipcol; } windspeed = cc->windspeed; winddir = cc->winddir; (void) signal(SIGHUP, choke); (void) signal(SIGINT, choke); hasdriver = sync_exists(game); if (sync_open() < 0) { perror("sail: syncfile"); exit(1); } if (hasdriver) { (void) puts("Synchronizing with the other players..."); (void) fflush(stdout); if (Sync() < 0) leave(LEAVE_SYNC); } for (;;) { foreachship(sp) if (sp->file->captain[0] == 0 && !sp->file->struck && sp->file->captured == 0) break; if (sp >= ls) { (void) puts("All ships taken in that scenario."); foreachship(sp) free((char *)sp->file); sync_close(0); people = 0; goto reprint; } if (randomize) { player = sp - SHIP(0); } else { printf("%s\n\n", cc->name); foreachship(sp) printf(" %2d: %-10s %-15s (%-2d pts) %s\n", sp->file->index, countryname[sp->nationality], sp->shipname, sp->specs->pts, saywhat(sp, 1)); printf("\nWhich ship (0-%d)? ", cc->vessels-1); (void) fflush(stdout); if (scanf("%d", &player) != 1 || player < 0 || player >= cc->vessels) { while (getchar() != '\n') ; (void) puts("Say what?"); player = -1; } else while (getchar() != '\n') ; } if (player < 0) continue; if (Sync() < 0) leave(LEAVE_SYNC); fp = SHIP(player)->file; if (fp->captain[0] || fp->struck || fp->captured != 0) (void) puts("That ship is taken."); else break; } ms = SHIP(player); mf = ms->file; mc = ms->specs; Write(W_BEGIN, ms, 0, 0, 0, 0, 0); if (Sync() < 0) leave(LEAVE_SYNC); (void) signal(SIGCHLD, child); if (!hasdriver) switch (fork()) { case 0: longjmp(restart, MODE_DRIVER); /*NOTREACHED*/ case -1: perror("fork"); leave(LEAVE_FORK); break; default: hasdriver++; } printf("Your ship is the %s, a %d gun %s (%s crew).\n", ms->shipname, mc->guns, classname[mc->class], qualname[mc->qual]); if ((nameptr = (char *) getenv("SAILNAME")) && *nameptr) (void) strncpy(captain, nameptr, sizeof captain); else { (void) printf("Your name, Captain? "); (void) fflush(stdout); (void) gets(captain); if (!*captain) (void) strcpy(captain, "no name"); } captain[sizeof captain - 1] = '\0'; Write(W_CAPTAIN, ms, 1, (int)captain, 0, 0, 0); for (n = 0; n < 2; n++) { char buf[10]; printf("\nInitial broadside %s (grape, chain, round, double): ", n ? "right" : "left"); (void) fflush(stdout); (void) scanf("%s", buf); switch (*buf) { case 'g': load = L_GRAPE; break; case 'c': load = L_CHAIN; break; case 'r': load = L_ROUND; break; case 'd': load = L_DOUBLE; break; default: load = L_ROUND; } if (n) { mf->loadR = load; mf->readyR = R_LOADED|R_INITIAL; } else { mf->loadL = load; mf->readyL = R_LOADED|R_INITIAL; } } initscreen(); draw_board(); (void) sprintf(message, "Captain %s assuming command", captain); Write(W_SIGNAL, ms, 1, (int)message, 0, 0, 0); newturn(); }
int main(int argc, char **argv) { int itmp, y; if (argc > 1 && atol(argv[1])) nap_msec = atol(argv[1]); #ifdef XCURSES Xinitscr(argc, argv); #else initscr(); #endif backfill(); for (y = 0; y < 5; y++) { p1 = mkpanel(10, 10, 0, 0); set_panel_userptr(p1, "p1"); p2 = mkpanel(14, 14, 5, 5); set_panel_userptr(p2, "p2"); p3 = mkpanel(6, 8, 12, 12); set_panel_userptr(p3, "p3"); p4 = mkpanel(10, 10, 10, 30); w4 = panel_window(p4); set_panel_userptr(p4, "p4"); p5 = mkpanel(10, 10, 13, 37); w5 = panel_window(p5); set_panel_userptr(p5, "p5"); fill_panel(p1); fill_panel(p2); fill_panel(p3); fill_panel(p4); fill_panel(p5); hide_panel(p4); hide_panel(p5); pflush(); wait_a_while(nap_msec); saywhat("h3 s1 s2 s4 s5;"); move_panel(p1, 0, 0); hide_panel(p3); show_panel(p1); show_panel(p2); show_panel(p4); show_panel(p5); pflush(); wait_a_while(nap_msec); saywhat("s1;"); show_panel(p1); pflush(); wait_a_while(nap_msec); saywhat("s2;"); show_panel(p2); pflush(); wait_a_while(nap_msec); saywhat("m2;"); move_panel(p2, 10, 10); pflush(); wait_a_while(nap_msec); saywhat("s3;"); show_panel(p3); pflush(); wait_a_while(nap_msec); saywhat("m3;"); move_panel(p3, 5, 5); pflush(); wait_a_while(nap_msec); saywhat("b3;"); bottom_panel(p3); pflush(); wait_a_while(nap_msec); saywhat("s4;"); show_panel(p4); pflush(); wait_a_while(nap_msec); saywhat("s5;"); show_panel(p5); pflush(); wait_a_while(nap_msec); saywhat("t3;"); top_panel(p3); pflush(); wait_a_while(nap_msec); saywhat("t1;"); top_panel(p1); pflush(); wait_a_while(nap_msec); saywhat("t2;"); top_panel(p2); pflush(); wait_a_while(nap_msec); saywhat("t3;"); top_panel(p3); pflush(); wait_a_while(nap_msec); saywhat("t4;"); top_panel(p4); pflush(); wait_a_while(nap_msec); for (itmp = 0; itmp < 6; itmp++) { saywhat("m4;"); mvwaddstr(w4, 3, 1, mod[itmp]); move_panel(p4, 4, itmp * 10); mvwaddstr(w5, 4, 1, mod[itmp]); pflush(); wait_a_while(nap_msec); saywhat("m5;"); mvwaddstr(w4, 4, 1, mod[itmp]); move_panel(p5, 7, itmp * 10 + 6); mvwaddstr(w5, 3, 1, mod[itmp]); pflush(); wait_a_while(nap_msec); } saywhat("m4;"); move_panel(p4, 4, itmp * 10); pflush(); wait_a_while(nap_msec); saywhat("t5;"); top_panel(p5); pflush(); wait_a_while(nap_msec); saywhat("t2;"); top_panel(p2); pflush(); wait_a_while(nap_msec); saywhat("t1;"); top_panel(p1); pflush(); wait_a_while(nap_msec); saywhat("d2;"); rmpanel(p2); pflush(); wait_a_while(nap_msec); saywhat("h3;"); hide_panel(p3); pflush(); wait_a_while(nap_msec); saywhat("d1;"); rmpanel(p1); pflush(); wait_a_while(nap_msec); saywhat("d4; "); rmpanel(p4); pflush(); wait_a_while(nap_msec); saywhat("d5; "); rmpanel(p5); pflush(); wait_a_while(nap_msec); if (nap_msec == 1) break; nap_msec = 100L; } endwin(); return 0; } /* end of main */
static void demo_panels(void (*myInit) (void), void (*myFill) (PANEL *)) { int itmp; PANEL *px[MAX_PANELS + 1]; scrollok(stdscr, FALSE); /* we don't want stdscr to scroll! */ refresh(); myInit(); for (itmp = 1; itmp <= MAX_PANELS; ++itmp) px[itmp] = 0; px[1] = mkpanel(COLOR_RED, LINES / 2 - 2, COLS / 8 + 1, 0, 0); px[2] = mkpanel(COLOR_GREEN, LINES / 2 + 1, COLS / 7, LINES / 4, COLS / 10); px[3] = mkpanel(COLOR_YELLOW, LINES / 4, COLS / 10, LINES / 2, COLS / 9); px[4] = mkpanel(COLOR_BLUE, LINES / 2 - 2, COLS / 8, LINES / 2 - 2, COLS / 3); px[5] = mkpanel(COLOR_MAGENTA, LINES / 2 - 2, COLS / 8, LINES / 2, COLS / 2 - 2); myFill(px[1]); myFill(px[2]); myFill(px[3]); myFill(px[4]); myFill(px[5]); hide_panel(px[4]); hide_panel(px[5]); pflush(); saywhat(""); wgetch(stdscr); saywhat("h3 s1 s2 s4 s5"); move_panel(px[1], 0, 0); hide_panel(px[3]); show_panel(px[1]); show_panel(px[2]); show_panel(px[4]); show_panel(px[5]); pflush(); wgetch(stdscr); canned_panel(px, "s1"); canned_panel(px, "s2"); saywhat("m2"); move_panel(px[2], LINES / 3 + 1, COLS / 8); pflush(); wgetch(stdscr); canned_panel(px, "s3"); saywhat("m3"); move_panel(px[3], LINES / 4 + 1, COLS / 15); pflush(); wgetch(stdscr); canned_panel(px, "b3"); canned_panel(px, "s4"); canned_panel(px, "s5"); canned_panel(px, "t3"); canned_panel(px, "t1"); canned_panel(px, "t2"); canned_panel(px, "t3"); canned_panel(px, "t4"); for (itmp = 0; itmp < 6; itmp++) { WINDOW *w4 = panel_window(px[4]); WINDOW *w5 = panel_window(px[5]); saywhat("m4"); wmove(w4, LINES / 8, 1); waddstr(w4, mod[itmp]); move_panel(px[4], LINES / 6, itmp * (COLS / 8)); wmove(w5, LINES / 6, 1); waddstr(w5, mod[itmp]); pflush(); wgetch(stdscr); saywhat("m5"); wmove(w4, LINES / 6, 1); waddstr(w4, mod[itmp]); move_panel(px[5], LINES / 3 - 1, (itmp * 10) + 6); wmove(w5, LINES / 8, 1); waddstr(w5, mod[itmp]); pflush(); wgetch(stdscr); } saywhat("m4"); move_panel(px[4], LINES / 6, itmp * (COLS / 8)); pflush(); wgetch(stdscr); canned_panel(px, "t5"); canned_panel(px, "t2"); canned_panel(px, "t1"); canned_panel(px, "d2"); canned_panel(px, "h3"); canned_panel(px, "d1"); canned_panel(px, "d4"); canned_panel(px, "d5"); canned_panel(px, "d3"); wgetch(stdscr); erase(); endwin(); }
static int rt_cmd(CIRCUIT *circuit) { CIRCUIT *c; USER *user, *su; char *f1, *f2; user = circuit->u.user; switch(tolower(circuit->buf[1])) { case 'b' : return FALSE; case 'e' : user->flags flipbit u_echo; return true; case 'h' : tputs("/U - Show Users.\n/N - Enter your Name.\n/Q - Enter your QTH.\n/T - Show Topics.\n"); tputs("/T Name - Join Topic or Create new Topic.\n/P - Show Ports and Links.\n"); tputs("/E - Toggle Echo.\n/S CALL Text - Send Text to that station only.\n"); tputs("/F - Force all links to be made.\n/K - Show Known nodes.\n"); tputs("/B - Leave RoundTable and return to node.\n"); return true; case 'k' : show_nodes(); return true; case 'n' : strnew(&user->name, circuit->buf + 3); saydone(); upduser(user); user_tell(user, id_user); return true; case 'p' : show_circuits(); return true; case 'q' : strnew(&user->qth, circuit->buf + 3); saydone(); upduser(user); user_tell(user, id_user); return true; case 's' : strcat(circuit->buf, "\n"); f1 = strlop(circuit->buf, ' '); // To. if (!f1) break; f2 = strlop(f1, ' '); // Text to send. if (!f2) break; strupr(f1); su = user_find(f1); if (!su) { tputs("*** That user is not logged in.\n"); return true; } // Send to the desired user only. if (su->circuit->flags & p_user) text_tellu(user, f2, f1, o_one); else text_xmit(user, su, f2); return true; case 't' : f1 = strlop(circuit->buf, ' '); if (f1) { topic_chg(user, f1); // Tell all link circuits about the change of topic. for (c = circuit_hd; c; c = c->next) if (c->flags & p_linked) topic_xmit(user, c); } else show_topics(); return true; case 'u' : show_users(); return true; default : break; } saywhat(); return true; }