#include "config.h"
#include "mud.h"
#include "match.h"
#include "u.h"
#include "y.tab.h"
static int
parseflg(fstr)
char *fstr;
{
int rv = 0;
while(fstr && *fstr) {
switch(*fstr++) {
case 'U':
rv |= MTCH_UNIQ;
break;
case 'F':
rv |= MTCH_FRST;
break;
case 'R':
rv |= MTCH_RAND;
break;
case 'N':
rv |= MTCH_NONLOC;
break;
case 'M':
rv |= MTCH_MEOK;
break;
case 'Q':
rv |= MTCH_QUIET;
break;
case 'W':
rv |= MTCH_WHICH;
break;
case 'E':
rv |= MTCH_EXACT;
break;
}
}
return(rv);
}
ub_mWHO(who,aswho,ac,av,retnode)
char *who;
char *aswho;
int ac;
Nod *av[];
Nod *retnode;
{
char oid[MAXOID];
if(av[0]->rv.t != STR)
return(UERR_BADPARM);
if(matchloggedinplayers(av[0]->rv.cv,oid) != MTCHRET_OK)
return(UERR_NOMATCH);
retnode->rv.cv = tmpstr(oid);
retnode->rv.t = OID;
return(UERR_NONE);
}
ub_mobj(who,aswho,ac,av,retnode)
char *who;
char *aswho;
int ac;
Nod *av[];
Nod *retnode;
{
int flgs = MTCH_MEOK|MTCH_QUIET|MTCH_UNIQ;
char oid[MAXOID];
if(ac < 1 || ac > 2 || av[0]->rv.t != STR)
return(UERR_BADPARM);
if(ac == 2) {
if(av[1]->rv.t != STR)
return(UERR_BADPARM);
flgs = parseflg(av[1]->rv.cv);
}
if(matchobjects(who,av[0]->rv.cv,ut_loc(who),flgs,oid) != MTCHRET_OK)
return(UERR_NOMATCH);
retnode->rv.cv = tmpstr(oid);
retnode->rv.t = OID;
return(UERR_NONE);
}
ub_mply(who,aswho,ac,av,retnode)
char *who;
char *aswho;
int ac;
Nod *av[];
Nod *retnode;
{
int flgs = MTCH_MEOK|MTCH_QUIET|MTCH_UNIQ;
char oid[MAXOID];
if(ac < 1 || ac > 2 || av[0]->rv.t != STR)
return(UERR_BADPARM);
if(ac == 2) {
if(av[1]->rv.t != STR)
return(UERR_BADPARM);
flgs = parseflg(av[1]->rv.cv);
}
if(matchplayers(who,av[0]->rv.cv,ut_loc(who),flgs,oid) != MTCHRET_OK)
return(UERR_NOMATCH);
retnode->rv.cv = tmpstr(oid);
retnode->rv.t = OID;
return(UERR_NONE);
}
ub_mloc(who,aswho,ac,av,retnode)
char *who;
char *aswho;
int ac;
Nod *av[];
Nod *retnode;
{
int flgs = MTCH_MEOK|MTCH_QUIET|MTCH_UNIQ;
char oid[MAXOID];
if(ac < 1 || ac > 2 || av[0]->rv.t != STR)
return(UERR_BADPARM);
if(ac == 2) {
if(av[1]->rv.t != STR)
return(UERR_BADPARM);
flgs = parseflg(av[1]->rv.cv);
}
if(matchlocal(who,av[0]->rv.cv,ut_loc(who),flgs,oid) != MTCHRET_OK)
return(UERR_NOMATCH);
retnode->rv.cv = tmpstr(oid);
retnode->rv.t = OID;
return(UERR_NONE);
}
ub_minv(who,aswho,ac,av,retnode)
char *who;
char *aswho;
int ac;
Nod *av[];
Nod *retnode;
{
int flgs = MTCH_MEOK|MTCH_QUIET|MTCH_UNIQ;
char oid[MAXOID];
if(ac < 1 || ac > 2 || av[0]->rv.t != STR)
return(UERR_BADPARM);
if(ac == 2) {
if(av[1]->rv.t != STR)
return(UERR_BADPARM);
flgs = parseflg(av[1]->rv.cv);
}
if(matchinv(who,av[0]->rv.cv,ut_loc(who),flgs,oid) != MTCHRET_OK)
return(UERR_NOMATCH);
retnode->rv.cv = tmpstr(oid);
retnode->rv.t = OID;
return(UERR_NONE);
}