Beispiel #1
0
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;
}
Beispiel #2
0
void         login_timeout (player * p, char *dummy)
{
   writep (p, "Login timed out after 60 seconds.\n");
   p->flags |= P_LOGOUT;

   return;
}
Beispiel #3
0
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);

}
Beispiel #4
0
void         screen_two (player * p, char *str)
{
   writep (p, terminals_msg.data);
   promptp (p, " Enter your selection[vt100]: ");
   p->func = enter_terminal;
   return;
}
Beispiel #5
0
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;
}
Beispiel #6
0
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;
}
Beispiel #7
0
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;
}
Beispiel #8
0
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;
}
Beispiel #9
0
void
writeof(		/* write end of file command to fp */
	FILE  *fp
)

{

 writep(&peof, fp);

}
Beispiel #10
0
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;
   }
}
Beispiel #11
0
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;
}
Beispiel #12
0
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;
}
Beispiel #13
0
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;
   }
}
Beispiel #14
0
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);

}
Beispiel #15
0
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;
}
Beispiel #16
0
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);
}
Beispiel #17
0
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);
}
Beispiel #18
0
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;
}
Beispiel #19
0
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]);
    }

}
Beispiel #20
0
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;
}