/
bin/95/
docs/DM/
docs/creatures/
docs/objects/
docs/rooms/
docs/utils/
help/
log/
objmon/ddesc/
player/
post/
rooms/
util/
util/fing/
util/italk/
util/lev-reset/
util/lib/
util/list/
util/msg/
util/tdel/
util/vote/
util/wtfix/
#include <stdio.h>
#include <ctype.h>
#include "mstruct.h"
#include "mextern.h"
#include "utils.h"

#define set_flag(f,n) ((f) |= 1 << (n))
#define clr_flag(f,n) ((f) &= ~(1 << (n)))
#define is_fset(f,n) ((f) & 1 << (n))

/* This is in src/global.c */
char class_str[][15] = { "None", "Assassin", "Barbarian", "Cleric",
        "Fighter", "Mage", "Paladin", "Ranger", "Thief", "Bard", "Monk",
        "Druid", "Alchemist", "Caretaker","Dungeonmaster" };

char race_str[][15] = { "Unknown", "Dwarf", "Elf", "Half-elf", "Halfling",
        "Human", "Orc", "Half-giant", "Gnome", "Troll", "Half-orc", "Ogre","Dark
-elf", "Goblin" };

int main (int argc, char *argv[])
/* plist coomand provides a quick way to check a given players *
 * level, class, password and inventory without having to log  *
 * the player in or use the editor */
{
creature	*player;
int		i,adj,lvl=0;
char		flags = 0;
	adj = 1;

 
    if (argc < 2) {
        printf("syntax: plist [[-pni] [-l #]] <players>\n");
        return(1);
    }
 
    for (i=1;i<argc;i++){
 
        if (argv[i][0] == '-'){
            switch(argv[i][1]){
                case 'i':
		    set_flag(flags,0);
                    continue;
                break;
                case 'n':
		    set_flag(flags,1);
                    continue;
                case 'p':
		    set_flag(flags,2);
                    continue;
                break;  
            }
 
            if(i+1 < argc && isdigit(argv[i+1][0])){
                switch(argv[i][1]){
                    case 'l':
                        lvl = atoi(argv[i+1]);
                    break;
                    default:
                       set_flag(flags,3); 
                    break;
                }
                i++;
            }
            else
                set_flag(flags,3); 
        }
	else
	    break;
 
        if (is_fset(flags,3)){
            printf("syntax: plist [[-pni] [-l #]] <players>\n");
            return(1);
        }
            
    } 
	adj = i;

	if (adj >= argc){
        	printf("syntax: plist [[-pni] [-l #]] <players>\n");
		return(1);
	}

	for(i= adj;i < argc; i++){

		if(!isupper(argv[i][0]))
			continue;	
		if(load_ply_from_file(argv[i], &player) < 0){
			printf("Player Load Error (%s).\n", argv[i]);
			continue;
		}

		/* not lvl check or player = lvl */
		if( !lvl || player->level == lvl){
		   printf("%s%s",(!is_fset(flags,1)) ? "Name: " : "",
			player->name);

		/*print  password */
		if (is_fset(flags,2))
			printf(" (%s)\n",player->password);
		else
			printf("\n");

		/* if not name only display */
		if(!is_fset(flags,1))
		    printf("Class: %s  (%d) %s\n",class_str[player->class],
		       player->level,race_str[player->race]);

		/* print players inventory */
		if(is_fset(flags,0)){
		    otag *obj, *cnt;
		    int len = 0;

		    printf("Inventory:\n");
		    obj = player->first_obj; 
		    if(!obj) printf("none");

		    while(obj){
			printf("%s%s",obj->obj->name, (obj->next_tag) ?
			    (F_ISSET(obj->obj,OCONTN)) ? ":" :", " : ".");
			len += strlen(obj->obj->name);

			if(F_ISSET(obj->obj,OCONTN)){
			    cnt = obj->obj->first_obj;
			    printf("(");
			    if (!cnt) printf("empty");
			    while(cnt){
				printf("%s%s",cnt->obj->name, 
				  (cnt->next_tag) ?  ", " : "");
				len += strlen(cnt->obj->name);
				if (len > 50){
					printf("\n");
					len = 0; }
				cnt = cnt->next_tag;
			    }
			    printf(")%s",(obj->next_tag) ? ", " : ".");
			}
			if (len > 50){
				printf("\n");
				len = 0;
			}
                       obj = obj->next_tag;    
		    }
		       printf("\n");
		}
                }

		free_crt(player);
	}

	return(0);
}