void do_who (CHAR_DATA * ch, char *argument)
{
    char buf[MAX_STRING_LENGTH];
    BUFFER *output;
    DESCRIPTOR_DATA *d;
    int wlevel;
    int nMatch;
    int iMatch;
    bool imm = FALSE;
    bool mor = FALSE;
    sprintf (buf, "\n\r       {cThe Land of {CA{ceternitas{x\n\r\n\r");
    send_to_char(buf, ch);
    nMatch = 0;
    iMatch = 0;
    buf[0] = '\0';
    output = new_buf ();
    for ( wlevel=MAX_LEVEL; wlevel>0; wlevel-- )
    {
     for (d = descriptor_list; d != NULL; d = d->next)
     {
       CHAR_DATA *wch;
       if (d->connected != CON_PLAYING || !can_see (ch, d->character))
           continue;
       wch = (d->original != NULL) ? d->original : d->character;
       if( wch->level != wlevel )
           continue;
       if (wch->level >= 52)
          imm = TRUE;
       if (wch->level <= 51)
          mor = TRUE;
       if (!can_see (ch, wch))
           continue;
     }
    }
    if (imm)
    {
       sprintf (buf, "   {c--{G={c-{G={c-{G={c-{G= {YImmortals  {G={c-{G={c-{G={c-{G={c--{W{X\n\r\n\r");
       send_to_char(buf, ch);
    }
    for ( wlevel=MAX_LEVEL; wlevel>0; wlevel-- )
    {
     for (d = descriptor_list; d != NULL; d = d->next)
     {
       CHAR_DATA *wch;
       if (d->connected != CON_PLAYING || !can_see (ch, d->character))
           continue;
       wch = (d->original != NULL) ? d->original : d->character;
       if( wch->level != wlevel )
           continue;
       if (!can_see (ch, wch))
           continue;
       if (wch->level < 52)
           continue;
       iMatch++;
       sprintf (buf, "{m[ {x%6s  {m]{x %s%s%s%s%s%s%s%s{X\n\r",
                wch->race < MAX_PC_RACE ? pc_race_table[wch->race].who_name
                : "     ",
                wch->incog_level >= LEVEL_HERO ? "(Incog) " : "",
                wch->invis_level >= LEVEL_HERO ? "(Wizi) " : "",
                clan_table[wch->clan].who_name,
                IS_SET (wch->comm, COMM_AFK) ? "[AFK] " : "",
                IS_SET (wch->act, PLR_KILLER) ? "(KILLER) " : "",
                IS_SET (wch->act, PLR_THIEF) ? "(THIEF) " : "",
                wch->name, IS_NPC (wch) ? "" : wch->pcdata->title);
       add_buf (output, buf);
     }
    }
    if (mor)
    {
       sprintf (buf, "\n\r   {c--{G={c-{G={c-{G={c-{G= {Y Mortals   {G={c-{G={c-{G={c-{G={c--{W{X\n\r\n\r");
       add_buf (output, buf);
    }
    for ( wlevel=MAX_LEVEL; wlevel>0; wlevel-- )
    {
     for (d = descriptor_list; d != NULL; d = d->next)
     {
       CHAR_DATA *wch;
       if (d->connected != CON_PLAYING || !can_see (ch, d->character))
           continue;
       wch = (d->original != NULL) ? d->original : d->character;
       if( wch->level != wlevel )
           continue;
       if (!can_see (ch, wch))
           continue;
       if (wch->level > 52)
           continue;
       nMatch++;
       sprintf (buf, "{m[ {x%6s  {m]{x %s%s%s%s%s%s%s%s{X\n\r",
                wch->race < MAX_PC_RACE ? pc_race_table[wch->race].who_name
                : "     ",
                wch->incog_level >= LEVEL_HERO ? "(Incog) " : "",
                wch->invis_level >= LEVEL_HERO ? "(Wizi) " : "",
                clan_table[wch->clan].who_name,
                IS_SET (wch->comm, COMM_AFK) ? "[AFK] " : "",
                IS_SET (wch->act, PLR_KILLER) ? "(KILLER) " : "",
                IS_SET (wch->act, PLR_THIEF) ? "(THIEF) " : "",
                wch->name, IS_NPC (wch) ? "" : wch->pcdata->title);
       add_buf (output, buf);
     }
    }
    sprintf (buf, "\n\rPlayers found: %d Immortals found : %d\n\r", nMatch, iMatch);
    add_buf (output, buf);
    page_to_char (buf_string (output), ch);
    free_buf (output);
    return;
}