void c_aliases (player * p, char *str) { int i; command *com; char *ref = stack; strcpy (stack, "Available command aliases:\n "); for (i = 0; i < 27; i++) for (com = root_commands[i]; com->key; com++) if (com->level <= p->residency && com->flags & c_ALS) { stack = strchr (stack, 0); sprintf (stack, "%s ", com->key); } if (stack == ref) writep (p, "No command aliases available to you.\n"); else { *(stack - 2) = '\n'; *(stack - 1) = '\0'; writep (p, ref); stack = ref; } return; }
void login_timeout (player * p, char *dummy) { writep (p, "Login timed out after 60 seconds.\n"); p->flags |= P_LOGOUT; return; }
void pprim( /* print primitive */ int co, int a0, int xmin, int ymin, int xmax, int ymax, char *s ) { PRIMITIVE p; p.com = co; p.arg0 = a0; p.xy[XMN] = xmin; p.xy[YMN] = ymin; p.xy[XMX] = xmax; p.xy[YMX] = ymax; p.args = s; writep(&p, pout); }
void screen_two (player * p, char *str) { writep (p, terminals_msg.data); promptp (p, " Enter your selection[vt100]: "); p->func = enter_terminal; return; }
void view_subcommands (player * p, command * parent) { command *com, *top; char *ref = stack; com = parent->sublist; sprintf (stack, "Available %s subcommands...\n ", parent->key); for (top = com++; com->key; com++) if (com->level <= p->residency) { stack = strchr (stack, 0); sprintf (stack, "%s ", com->key); } if (stack == ref) vwritep (p, "No %s subcommands available to you.\n", parent->key); else { stack = strchr (stack, 0); *(stack - 2) = '\n'; *(stack - 1) = '\0'; writep (p, ref); stack = ref; } return; }
void run_subcommand (player * p, char *str, command * parent) { command *com; char *param; trim_end (str); if (!parent->sublist) { writep (p, "No subcommands found!\n"); vlog ("parser", "run_subcommand: No %s subcommands found!\n", parent->key); return; } if (!*str) { view_subcommands (p, parent); return; } param = next_space (str); if (*param) *param++ = '\0'; com = find_subcommand (p, str, parent); if (com == NULL) { vwritep (p, "No command %s %s available to you.\n", parent->key, str); return; } else actually_do_command (p, com, param); return; }
void c_null (player * p, char *str) { writep (p, "Erk. This is the subcommand safety net. There's something " "wrong with that command.\n"); log ("parser", "c_null: Arrived in c_null - check the command list.\n"); return; }
void login_screen (player * p) { if (system_flags & LOCKOUT) { writep (p, " Sorry, but we're currently closed to all connections.\n\n"); p->flags |= P_LOGOUT; return; } if (shutdown_count > 0) { tell_player (p, " Sorry, there is a system reboot scheduled in %s. Please try again later.\n\n", word_time (shutdown_count)); p->flags |= P_LOGOUT; return; } writep (p, connect_msg.data); tell_player (p, " Serpent is running on %s Version %s on %s hardware.\n Nodename is %s.\n\n", uts.sysname, uts.release, uts.machine, uts.nodename); login_prompt (p); return; }
void writeof( /* write end of file command to fp */ FILE *fp ) { writep(&peof, fp); }
void agree_dis (player * p, char *str) { if (!strcasecmp (str, "agree")) { writep (p, "Terms and conditions are accepted.\n"); writep (p, motd_msg.data); promptp (p, " [Hit <RETURN> to continue.]"); p->func = show_motd; } else if (!strcasecmp (str, "reject")) { writep (p, "Closing your connection immediately.\n"); p->flags |= P_LOGOUT; } else { promptp (p, " Please type \"agree\" or \"reject\" to these terms: "); p->func = agree_dis; } }
void enter_terminal (player * p, char *str) { if (!*str) c_terminal (p, "vt100"); else if (!strncasecmp (str, "vt100", strlen (str))) c_terminal (p, "vt100"); else if (!strncasecmp (str, "ansi", strlen (str))) c_terminal (p, "ansi"); else c_terminal (p, "none"); writep (p, dis_msg.data); promptp (p, " Please type \"agree\" or \"reject\" to these terms: "); p->func = agree_dis; }
void c_commands (player * p, char *str) { int i, len = 0, count; command *com; char *ref = stack; char temp[80]; for (i = 0, count = 0; i < 27; i++) for (com = root_commands[i]; com->key; com++) if (com->level <= p->residency) count++; sprintf (temp, "Your command set contains %d commands", count); banner (p, stack, temp, '-'); stack = strchr (stack, 0); *stack++ = ' '; *stack++ = ' '; for (i = 0; i < 27; i++) for (com = root_commands[i]; com->key; com++) if (com->level <= p->residency) { len += (strlen (com->key) + 2); if (len < 77) { sprintf (stack, "%s, ", com->key); stack = strchr (stack, 0); } else { len = 0; *stack++ = '\n'; *stack++ = ' '; *stack++ = ' '; len += (strlen (com->key) + 2); sprintf (stack, "%s, ", com->key); stack = strchr (stack, 0); } } stack--; stack--; *stack++ = '.'; *stack++ = '\n'; banner (p, stack, 0, '-'); stack = strchr (stack, 0); *stack++ = 0; writep (p, ref); stack = ref; return; }
void get_pass (player * p, char *str) { if (!strcmp (str, p->password)) { got_login_two (p); return; } else { writep (p, " Password incorrect.\n\n"); login_prompt (p); return; } }
void pglob( /* print global */ int co, int a0, char *s ) { PRIMITIVE p; p.com = co; p.arg0 = a0; p.xy[XMN] = p.xy[YMN] = p.xy[XMX] = p.xy[YMX] = -1; p.args = s; writep(&p, pout); }
void got_login_two (player * p) { player *scan; for (scan = p_top; scan; scan = scan->p_next) { if (!strcasecmp (scan->name, p->name) && scan != p) { tell_player (scan, "Your mind slowly drifts away as you are reconnected from %s:%d\n", p->sock.ip, p->sock.port); scan->flags &= ~HERE; c_quit (scan, 0); p->flags |= P_RECON; writep (p, "[ detected a reconnection. ]\n"); } } enter_arena (p, 0); return; }
void plot4( /* put a file into its place on page */ FILE *fp ) { static int nplts = 0; PRIMITIVE curp; pglob(POPEN, 0, SEGNAME); while (readp(&curp, fp)) if (curp.com == PEOP) { pglob(PCLOSE, 0200, NULL); doseg(nplts++ % 4); pglob(POPEN, 0, SEGNAME); } else writep(&curp, pout); pglob(PCLOSE, 0200, NULL); }
void plseg( /* plot line segment */ int a0, int xstart, int ystart, int xend, int yend ) { PRIMITIVE p; int reverse; if (xstart < xend) { p.xy[XMN] = xstart; p.xy[XMX] = xend; reverse = FALSE; } else { p.xy[XMN] = xend; p.xy[XMX] = xstart; reverse = TRUE; } if (ystart < yend) { p.xy[YMN] = ystart; p.xy[YMX] = yend; } else { p.xy[YMN] = yend; p.xy[YMX] = ystart; reverse = ystart > yend && !reverse; } p.com = PLSEG; p.arg0 = (reverse << 6) | a0; p.args = NULL; writep(&p, pout); }
void enter_arena (player * p, char *dummy) { int i, match = 0; p->flags |= P_PROMPT; move_to (p, mainroom); command_look (p, 0); channel = CHAN_SYSTEM; tell_player (p, "\n ~o~ Welcome to serpent %s! ~o~\n", p->name); if (p->flags & P_RECON) { tell_player (p, "\n [ reconnection complete. ]\n"); p->flags &= ~P_RECON; vlog ("connections", "%s has reconnected.\n", p->name); if (p->dual == 1) vwriter (p, 0, p->room, "[%s %s][dualplex two]\n", p->name, p->reconmsg); else vwriter (p, 0, p->room, "[%s %s][dualplex one]\n", p->name, p->reconmsg); } else { channel = CHAN_SYSTEM; vlog ("connections", "%s has connected - %s (%s:%d)\n", p->name, p->sock.host, p->sock.ip, p->sock.port); if (p->dual == 1) vwriter (p, 0, p->room, "[%s %s][dualplex two]\n", p->name, p->conmsg); else vwriter (p, 0, p->room, "[%s %s][dualplex one]\n", p->name, p->conmsg); } for (i = 0; root_users[i].key; i++) if (!strcasecmp (p->name, root_users[i].key)) { match = 1; tell_player (p, " Welcome, Administrator.\n"); p->residency |= RESIDENT; p->residency |= BASE; p->residency |= PSU; p->residency |= SU; p->residency |= LOWER_ADMIN; p->residency |= ADMIN; p->residency |= HCADMIN; p->residency |= CODER; p->residency |= SYSOP; vlog ("admin", "%s connects from %s %s:%d\n", p->name, p->sock.host, p->sock.ip, p->sock.port); } if (match == 0) { if (!(p->residency & RESIDENT)) tell_player (p, " [ you raise to level 1. ]\n"); p->residency |= BASE; } if (system_flags & NO_NEWBIES) if (p->residency & PSU) writep (p, " -=> We're currently closed to newbies.\n"); if (system_flags & TEMP_CLOSED) writep (p, " -=> We're temporarily closed due to repair.\n"); channel = 0; p->flags |= HERE; p->func = 0; return; }
void pmergesort( /* merge sorted files with list */ FILE *fi[], /* array of input files */ int nf, /* number of input files */ PLIST *pl, /* sorted list */ int (*pcmp)(), /* comparison function, takes primitive handles */ FILE *ofp /* output file */ ) { PRIMITIVE *plp; /* position in list */ PRIMITIVE *pp[NFILES]; /* input primitives */ int minf = 0; PRIMITIVE *minp; register int i; if (pl == NULL) plp = NULL; /* initialize list */ else plp = pl->ptop; for (i = 0; i < nf; i++) { /* initialize input files */ if ((pp[i] = palloc()) == NULL) error(SYSTEM, "memory exhausted in pmergesort"); readp(pp[i], fi[i]); } for ( ; ; ) { if (plp != NULL && isprim(plp->com)) minp = plp; else minp = NULL; for (i = 0; i < nf; i++) if (isprim(pp[i]->com) && (minp == NULL || (*pcmp)(&pp[i], &minp) < 0)) minp = pp[minf=i]; if (minp == NULL) break; writep(minp, ofp); if (minp == plp) plp = plp->pnext; else { fargs(pp[minf]); readp(pp[minf], fi[minf]); } } if (plp != NULL && plp->com != PEOF) writep(plp, ofp); for (i = 0; i < nf; i++) { if (pp[i]->com != PEOF) writep(pp[i], ofp); pfree(pp[i]); } }
void got_login (player * p, char *str) { char *fault; player *scan; str = trim_end (str); if ((fault = bad_name (str))) { writep (p, fault); login_prompt (p); return; } lower_case (str); sprintf (p->lower_name, str); if (player_load (p)) { if (system_flags & TEMP_CLOSED) if (!(p->residency & SU)) { writep (p, " Sorry, we're currently closed to connections. Try again later.\n\n"); p->flags |= P_LOGOUT; return; } promptp (p, "password: "******"quit")) { p->flags |= P_LOGOUT; return; } if (p->flags & P_RECON) { enter_arena (p, 0); return; } if (system_flags & NO_NEWBIES) { writep (p, " Sorry, but we're currently closed to newbies. Try again later.\n\n"); p->flags |= P_LOGOUT; return; } for (scan = p_top; scan; scan = scan->p_next) { if (!strcasecmp (str, scan->name)) { writep (p, " There is already someone on the program with that name.\n\n"); login_prompt (p); return; } } strncpy (p->name, str, P_NAME_LEN); strncpy (p->lower_name, p->name, P_NAME_LEN); lower_case (p->lower_name); writep (p, "\n"); writep (p, screen_one_msg.data); promptp (p, "[Hit <RETURN> to continue] "); p->func = screen_two; return; }