mux/src/command.cpp

Go to the documentation of this file.
00001 // command.cpp -- command parser and support routines.
00002 //
00003 // $Id: command.cpp,v 1.81 2007/04/14 04:57:05 sdennis Exp $
00004 //
00005 
00006 #include "copyright.h"
00007 #include "autoconf.h"
00008 #include "config.h"
00009 #include "externs.h"
00010 
00011 #include "ansi.h"
00012 #include "attrs.h"
00013 #include "command.h"
00014 #include "comsys.h"
00015 #include "functions.h"
00016 #include "mguests.h"
00017 #include "powers.h"
00018 #include "vattr.h"
00019 #include "help.h"
00020 #include "pcre.h"
00021 
00022 // Switch tables for the various commands.
00023 //
00024 static NAMETAB attrib_sw[] =
00025 {
00026     {"access",          1,  CA_GOD,     ATTRIB_ACCESS},
00027     {"delete",          1,  CA_GOD,     ATTRIB_DELETE},
00028     {"rename",          1,  CA_GOD,     ATTRIB_RENAME},
00029     { NULL,             0,       0,     0}
00030 };
00031 
00032 static NAMETAB boot_sw[] =
00033 {
00034     {"port",            1,  CA_WIZARD,  BOOT_PORT|SW_MULTIPLE},
00035     {"quiet",           1,  CA_WIZARD,  BOOT_QUIET|SW_MULTIPLE},
00036     { NULL,             0,          0,  0}
00037 };
00038 
00039 static NAMETAB cboot_sw[] =
00040 {
00041     {"quiet",           1,  CA_PUBLIC,  CBOOT_QUIET},
00042     { NULL,             0,          0,  0}
00043 };
00044 
00045 static NAMETAB comtitle_sw[] =
00046 {
00047     {"off",             2,  CA_PUBLIC,  COMTITLE_OFF},
00048     {"on",              2,  CA_PUBLIC,  COMTITLE_ON},
00049     { NULL,             0,          0,  0}
00050 };
00051 
00052 static NAMETAB cemit_sw[] =
00053 {
00054     {"noheader",        1,  CA_PUBLIC,  CEMIT_NOHEADER},
00055     { NULL,             0,          0,  0}
00056 };
00057 
00058 static NAMETAB clone_sw[] =
00059 {
00060     {"cost",            1,  CA_PUBLIC,  CLONE_SET_COST},
00061     {"inherit",         3,  CA_PUBLIC,  CLONE_INHERIT|SW_MULTIPLE},
00062     {"inventory",       3,  CA_PUBLIC,  CLONE_INVENTORY},
00063     {"location",        1,  CA_PUBLIC,  CLONE_LOCATION},
00064     {"parent",          2,  CA_PUBLIC,  CLONE_FROM_PARENT|SW_MULTIPLE},
00065     {"preserve",        2,  CA_WIZARD,  CLONE_PRESERVE|SW_MULTIPLE},
00066     { NULL,             0,          0,  0}
00067 };
00068 
00069 static NAMETAB clist_sw[] =
00070 {
00071     {"full",            0,  CA_PUBLIC,  CLIST_FULL},
00072     {"headers",         0,  CA_PUBLIC,  CLIST_HEADERS},
00073     { NULL,             0,          0,  0}
00074 };
00075 
00076 static NAMETAB cset_sw[] =
00077 {
00078     {"anon",            1,  CA_PUBLIC,  CSET_SPOOF},
00079     {"header",          1,  CA_PUBLIC,  CSET_HEADER},
00080     {"list",            2,  CA_PUBLIC,  CSET_LIST},
00081     {"log" ,            3,  CA_PUBLIC,  CSET_LOG},
00082     {"loud",            3,  CA_PUBLIC,  CSET_LOUD},
00083     {"mute",            1,  CA_PUBLIC,  CSET_QUIET},
00084     {"nospoof",         1,  CA_PUBLIC,  CSET_NOSPOOF},
00085     {"object",          1,  CA_PUBLIC,  CSET_OBJECT},
00086     {"private",         2,  CA_PUBLIC,  CSET_PRIVATE},
00087     {"public",          2,  CA_PUBLIC,  CSET_PUBLIC},
00088     {"quiet",           1,  CA_PUBLIC,  CSET_QUIET},
00089     {"spoof",           1,  CA_PUBLIC,  CSET_SPOOF},
00090     { NULL,             0,          0,  0}
00091 };
00092 
00093 static NAMETAB dbck_sw[] =
00094 {
00095     {"full",            1,  CA_WIZARD,  DBCK_FULL},
00096     { NULL,             0,          0,  0}
00097 };
00098 
00099 static NAMETAB decomp_sw[] =
00100 {
00101     {"dbref",           1,  CA_PUBLIC,  DECOMP_DBREF},
00102     { NULL,             0,           0, 0}
00103 };
00104 
00105 static NAMETAB destroy_sw[] =
00106 {
00107     {"instant",         4,  CA_PUBLIC,  DEST_INSTANT|SW_MULTIPLE},
00108     {"override",        8,  CA_PUBLIC,  DEST_OVERRIDE|SW_MULTIPLE},
00109     { NULL,             0,          0,  0}
00110 };
00111 
00112 static NAMETAB dig_sw[] =
00113 {
00114     {"teleport",        1,  CA_PUBLIC,  DIG_TELEPORT},
00115     { NULL,             0,          0,  0}
00116 };
00117 
00118 static NAMETAB doing_sw[] =
00119 {
00120     {"header",          1,  CA_PUBLIC,  DOING_HEADER},
00121     {"message",         1,  CA_PUBLIC,  DOING_MESSAGE},
00122     {"poll",            1,  CA_PUBLIC,  DOING_POLL},
00123     {"quiet",           1,  CA_PUBLIC,  DOING_QUIET|SW_MULTIPLE},
00124     {"unique",          1,  CA_PUBLIC,  DOING_UNIQUE},
00125     { NULL,             0,          0,  0}
00126 };
00127 
00128 static NAMETAB dolist_sw[] =
00129 {
00130     {"delimit",         1,  CA_PUBLIC,  DOLIST_DELIMIT},
00131     {"notify",          1,  CA_PUBLIC,  DOLIST_NOTIFY|SW_MULTIPLE},
00132     {"space",           1,  CA_PUBLIC,  DOLIST_SPACE},
00133     { NULL,             0,          0,  0}
00134 };
00135 
00136 #ifdef QUERY_SLAVE
00137 static NAMETAB query_sw[] =
00138 {
00139     {"sql",             1,  CA_PUBLIC,  QUERY_SQL},
00140     { NULL,             0,          0,  0}
00141 };
00142 #endif // QUERY_SLAVE
00143 
00144 static NAMETAB drop_sw[] =
00145 {
00146     {"quiet",           1,  CA_PUBLIC,  DROP_QUIET},
00147     { NULL,             0,          0,  0}
00148 };
00149 
00150 static NAMETAB dump_sw[] =
00151 {
00152     {"flatfile",        1,  CA_WIZARD,  DUMP_FLATFILE|SW_MULTIPLE},
00153     {"structure",       1,  CA_WIZARD,  DUMP_STRUCT|SW_MULTIPLE},
00154     {"text",            1,  CA_WIZARD,  DUMP_TEXT|SW_MULTIPLE},
00155     { NULL,             0,          0,  0}
00156 };
00157 
00158 static NAMETAB emit_sw[] =
00159 {
00160     {"here",            2,  CA_PUBLIC,  SAY_HERE|SW_MULTIPLE},
00161     {"html",            2,  CA_PUBLIC,  SAY_HTML|SW_MULTIPLE},
00162     {"room",            1,  CA_PUBLIC,  SAY_ROOM|SW_MULTIPLE},
00163     { NULL,             0,          0,  0}
00164 };
00165 
00166 static NAMETAB enter_sw[] =
00167 {
00168     {"quiet",           1,  CA_PUBLIC,  MOVE_QUIET},
00169     { NULL,             0,          0,  0}
00170 };
00171 
00172 static NAMETAB examine_sw[] =
00173 {
00174     {"brief",           1,  CA_PUBLIC,  EXAM_BRIEF},
00175     {"debug",           1,  CA_WIZARD,  EXAM_DEBUG},
00176     {"full",            1,  CA_PUBLIC,  EXAM_LONG},
00177     {"parent",          1,  CA_PUBLIC,  EXAM_PARENT},
00178     { NULL,             0,          0,  0}
00179 };
00180 
00181 static NAMETAB femit_sw[] =
00182 {
00183     {"here",            1,  CA_PUBLIC,  PEMIT_HERE|SW_MULTIPLE},
00184     {"room",            1,  CA_PUBLIC,  PEMIT_ROOM|SW_MULTIPLE},
00185     { NULL,             0,          0,  0}
00186 };
00187 
00188 static NAMETAB fixdb_sw[] =
00189 {
00190     {"contents",        1,     CA_GOD,  FIXDB_CON},
00191     {"exits",           1,     CA_GOD,  FIXDB_EXITS},
00192     {"location",        1,     CA_GOD,  FIXDB_LOC},
00193     {"next",            1,     CA_GOD,  FIXDB_NEXT},
00194     {"owner",           1,     CA_GOD,  FIXDB_OWNER},
00195     {"pennies",         1,     CA_GOD,  FIXDB_PENNIES},
00196     {"rename",          1,     CA_GOD,  FIXDB_NAME},
00197     { NULL,             0,          0,  0}
00198 };
00199 
00200 static NAMETAB flag_sw[] =
00201 {
00202     {"remove",          1,     CA_GOD,  FLAG_REMOVE},
00203     { NULL,             0,          0,  0}
00204 };
00205 
00206 static NAMETAB fpose_sw[] =
00207 {
00208     {"default",         1,  CA_PUBLIC,  0},
00209     {"nospace",         1,  CA_PUBLIC,  SAY_NOSPACE},
00210     { NULL,             0,          0,  0}
00211 };
00212 
00213 static NAMETAB function_sw[] =
00214 {
00215     {"list",            1,  CA_WIZARD,  FN_LIST},
00216     {"preserve",        3,  CA_WIZARD,  FN_PRES|SW_MULTIPLE},
00217     {"privileged",      3,  CA_WIZARD,  FN_PRIV|SW_MULTIPLE},
00218     { NULL,             0,          0,  0}
00219 };
00220 
00221 static NAMETAB get_sw[] =
00222 {
00223     {"quiet",           1,  CA_PUBLIC,  GET_QUIET},
00224     { NULL,             0,          0,  0}
00225 };
00226 
00227 static NAMETAB give_sw[] =
00228 {
00229     {"quiet",           1,  CA_WIZARD,  GIVE_QUIET},
00230     { NULL,             0,          0,  0}
00231 };
00232 
00233 static NAMETAB goto_sw[] =
00234 {
00235     {"quiet",           1,  CA_PUBLIC,  MOVE_QUIET},
00236     { NULL,             0,          0,  0}
00237 };
00238 
00239 static NAMETAB halt_sw[] =
00240 {
00241     {"all",             1,  CA_PUBLIC,  HALT_ALL},
00242     { NULL,             0,          0,  0}
00243 };
00244 
00245 static NAMETAB hook_sw[] =
00246 {
00247     {"after",           3,     CA_GOD,  HOOK_AFTER},
00248     {"before",          3,     CA_GOD,  HOOK_BEFORE},
00249     {"clear",           3,     CA_GOD,  HOOK_CLEAR|SW_MULTIPLE},
00250     {"fail",            1,     CA_GOD,  HOOK_AFAIL},
00251     {"ignore",          3,     CA_GOD,  HOOK_IGNORE},
00252     {"igswitch",        3,     CA_GOD,  HOOK_IGSWITCH},
00253     {"list",            3,     CA_GOD,  HOOK_LIST},
00254     {"permit",          3,     CA_GOD,  HOOK_PERMIT},
00255     {NULL,              0,          0,  0}
00256 };
00257 
00258 static NAMETAB icmd_sw[] =
00259 {
00260     {"check",           2,     CA_GOD,  ICMD_CHECK},
00261     {"clear",           2,     CA_GOD,  ICMD_CLEAR},
00262     {"croom",           2,     CA_GOD,  ICMD_CROOM},
00263     {"disable",         1,     CA_GOD,  ICMD_DISABLE},
00264     {"droom",           2,     CA_GOD,  ICMD_DROOM},
00265     {"ignore",          1,     CA_GOD,  ICMD_IGNORE},
00266     {"iroom",           2,     CA_GOD,  ICMD_IROOM},
00267     {"lroom",           2,     CA_GOD,  ICMD_LROOM},
00268     {"lallroom",        2,     CA_GOD,  ICMD_LALLROOM},
00269     {"off",             2,     CA_GOD,  ICMD_OFF},
00270     {"on",              2,     CA_GOD,  ICMD_ON},
00271     {NULL,              0,          0,  0}
00272 };
00273 
00274 static NAMETAB leave_sw[] =
00275 {
00276     {"quiet",           1,  CA_PUBLIC,  MOVE_QUIET},
00277     { NULL,             0,          0,  0}
00278 };
00279 
00280 static NAMETAB listmotd_sw[] =
00281 {
00282     {"brief",           1,  CA_WIZARD,  MOTD_BRIEF},
00283     { NULL,             0,          0,  0}
00284 };
00285 
00286 NAMETAB lock_sw[] =
00287 {
00288     {"defaultlock",     1,  CA_PUBLIC,  A_LOCK},
00289     {"droplock",        1,  CA_PUBLIC,  A_LDROP},
00290     {"enterlock",       1,  CA_PUBLIC,  A_LENTER},
00291     {"getfromlock",     1,  CA_PUBLIC,  A_LGET},
00292     {"givelock",        1,  CA_PUBLIC,  A_LGIVE},
00293     {"leavelock",       2,  CA_PUBLIC,  A_LLEAVE},
00294     {"linklock",        2,  CA_PUBLIC,  A_LLINK},
00295     {"maillock",        1,  CA_PUBLIC,  A_LMAIL},
00296     {"openlock",        1,  CA_PUBLIC,  A_LOPEN},
00297     {"pagelock",        3,  CA_PUBLIC,  A_LPAGE},
00298     {"parentlock",      3,  CA_PUBLIC,  A_LPARENT},
00299     {"receivelock",     1,  CA_PUBLIC,  A_LRECEIVE},
00300     {"speechlock",      1,  CA_PUBLIC,  A_LSPEECH},
00301     {"teloutlock",      2,  CA_PUBLIC,  A_LTELOUT},
00302     {"tportlock",       2,  CA_PUBLIC,  A_LTPORT},
00303     {"uselock",         1,  CA_PUBLIC,  A_LUSE},
00304     {"userlock",        4,  CA_PUBLIC,  A_LUSER},
00305     { NULL,             0,          0,  0}
00306 };
00307 
00308 static NAMETAB look_sw[] =
00309 {
00310     {"outside",         1,  CA_PUBLIC,  LOOK_OUTSIDE},
00311     { NULL,             0,          0,  0}
00312 };
00313 
00314 static NAMETAB mail_sw[] =
00315 {
00316     {"abort",           2,  CA_PUBLIC,  MAIL_ABORT},
00317     {"alias",           4,  CA_PUBLIC,  MAIL_ALIAS},
00318     {"alist",           4,  CA_PUBLIC,  MAIL_ALIST},
00319     {"bcc",             1,  CA_PUBLIC,  MAIL_BCC},
00320     {"cc",              2,  CA_PUBLIC,  MAIL_CC},
00321     {"clear",           2,  CA_PUBLIC,  MAIL_CLEAR},
00322     {"debug",           2,  CA_PUBLIC,  MAIL_DEBUG},
00323     {"dstats",          2,  CA_PUBLIC,  MAIL_DSTATS},
00324     {"edit",            1,  CA_PUBLIC,  MAIL_EDIT},
00325     {"file",            2,  CA_PUBLIC,  MAIL_FILE},
00326     {"folder",          3,  CA_PUBLIC,  MAIL_FOLDER},
00327     {"forward",         3,  CA_PUBLIC,  MAIL_FORWARD},
00328     {"fstats",          2,  CA_PUBLIC,  MAIL_FSTATS},
00329     {"fwd",             2,  CA_PUBLIC,  MAIL_FORWARD},
00330     {"list",            1,  CA_PUBLIC,  MAIL_LIST},
00331     {"nuke",            1,  CA_PUBLIC,  MAIL_NUKE},
00332     {"proof",           2,  CA_PUBLIC,  MAIL_PROOF},
00333     {"purge",           2,  CA_PUBLIC,  MAIL_PURGE},
00334     {"quick",           3,  CA_PUBLIC,  MAIL_QUICK},
00335     {"quote",           3,  CA_PUBLIC,  MAIL_QUOTE|SW_MULTIPLE},
00336     {"read",            3,  CA_PUBLIC,  MAIL_READ},
00337     {"reply",           3,  CA_PUBLIC,  MAIL_REPLY},
00338     {"replyall",        6,  CA_PUBLIC,  MAIL_REPLYALL},
00339     {"retract",         3,  CA_PUBLIC,  MAIL_RETRACT},
00340     {"review",          3,  CA_PUBLIC,  MAIL_REVIEW},
00341     {"safe",            2,  CA_PUBLIC,  MAIL_SAFE},
00342     {"send",            2,  CA_PUBLIC,  MAIL_SEND},
00343     {"stats",           2,  CA_PUBLIC,  MAIL_STATS},
00344     {"tag",             1,  CA_PUBLIC,  MAIL_TAG},
00345     {"unclear",         3,  CA_PUBLIC,  MAIL_UNCLEAR},
00346     {"untag",           3,  CA_PUBLIC,  MAIL_UNTAG},
00347     {"urgent",          2,  CA_PUBLIC,  MAIL_URGENT},
00348     { NULL,             0,          0,  0}
00349 };
00350 
00351 static NAMETAB malias_sw[] =
00352 {
00353     {"add",             1,  CA_PUBLIC,  MALIAS_ADD},
00354     {"chown",           1,  CA_PUBLIC,  MALIAS_CHOWN},
00355     {"desc",            1,  CA_PUBLIC,  MALIAS_DESC},
00356     {"delete",          1,  CA_PUBLIC,  MALIAS_DELETE},
00357     {"list",            1,  CA_PUBLIC,  MALIAS_LIST},
00358     {"remove",          1,  CA_PUBLIC,  MALIAS_REMOVE},
00359     {"rename",          1,  CA_PUBLIC,  MALIAS_RENAME},
00360     {"status",          1,  CA_PUBLIC,  MALIAS_STATUS},
00361     { NULL,             0,          0,  0}
00362 };
00363 
00364 static NAMETAB mark_sw[] =
00365 {
00366     {"clear",           1,  CA_PUBLIC,  MARK_CLEAR},
00367     {"set",             1,  CA_PUBLIC,  MARK_SET},
00368     { NULL,             0,          0,  0}
00369 };
00370 
00371 static NAMETAB markall_sw[] =
00372 {
00373     {"clear",           1,  CA_PUBLIC,  MARK_CLEAR},
00374     {"set",             1,  CA_PUBLIC,  MARK_SET},
00375     { NULL,             0,          0,  0}
00376 };
00377 
00378 static NAMETAB motd_sw[] =
00379 {
00380     {"brief",           1,  CA_WIZARD,  MOTD_BRIEF|SW_MULTIPLE},
00381     {"connect",         1,  CA_WIZARD,  MOTD_ALL},
00382     {"down",            1,  CA_WIZARD,  MOTD_DOWN},
00383     {"full",            1,  CA_WIZARD,  MOTD_FULL},
00384     {"list",            1,  CA_PUBLIC,  MOTD_LIST},
00385     {"wizard",          1,  CA_WIZARD,  MOTD_WIZ},
00386     { NULL,             0,          0,  0}
00387 };
00388 
00389 static NAMETAB notify_sw[] =
00390 {
00391     {"all",             1,  CA_PUBLIC,  NFY_NFYALL},
00392     {"first",           1,  CA_PUBLIC,  NFY_NFY},
00393     {"quiet",           1,  CA_PUBLIC,  NFY_QUIET},
00394     { NULL,             0,          0,  0}
00395 };
00396 
00397 static NAMETAB open_sw[] =
00398 {
00399     {"inventory",       1,  CA_PUBLIC,  OPEN_INVENTORY},
00400     {"location",        1,  CA_PUBLIC,  OPEN_LOCATION},
00401     { NULL,             0,          0,  0}
00402 };
00403 
00404 static NAMETAB page_sw[] =
00405 {
00406     {"noeval",          1,  CA_PUBLIC,  SW_NOEVAL|SW_MULTIPLE},
00407     { NULL,             0,          0,  0}
00408 };
00409 
00410 static NAMETAB pemit_sw[] =
00411 {
00412     {"contents",        1,  CA_PUBLIC,  PEMIT_CONTENTS|SW_MULTIPLE},
00413     {"html",            1,  CA_PUBLIC,  PEMIT_HTML|SW_MULTIPLE},
00414     {"list",            1,  CA_PUBLIC,  PEMIT_LIST|SW_MULTIPLE},
00415     {"noeval",          1,  CA_PUBLIC,  SW_NOEVAL|SW_MULTIPLE},
00416     {"object",          1,  CA_PUBLIC,  0},
00417     {"silent",          1,  CA_PUBLIC,  0},
00418     { NULL,             0,          0,  0}
00419 };
00420 
00421 static NAMETAB pose_sw[] =
00422 {
00423     {"default",         1,  CA_PUBLIC,  0},
00424     {"noeval",          3,  CA_PUBLIC,  SW_NOEVAL|SW_MULTIPLE},
00425     {"nospace",         3,  CA_PUBLIC,  SAY_NOSPACE},
00426     { NULL,             0,          0,  0}
00427 };
00428 
00429 static NAMETAB ps_sw[] =
00430 {
00431     {"all",             1,  CA_PUBLIC,  PS_ALL|SW_MULTIPLE},
00432     {"brief",           1,  CA_PUBLIC,  PS_BRIEF},
00433     {"long",            1,  CA_PUBLIC,  PS_LONG},
00434     {"summary",         1,  CA_PUBLIC,  PS_SUMM},
00435     { NULL,             0,          0,  0}
00436 };
00437 
00438 static NAMETAB quota_sw[] =
00439 {
00440     {"all",             1,  CA_GOD,     QUOTA_ALL|SW_MULTIPLE},
00441     {"fix",             1,  CA_WIZARD,  QUOTA_FIX},
00442     {"remaining",       1,  CA_WIZARD,  QUOTA_REM|SW_MULTIPLE},
00443     {"set",             1,  CA_WIZARD,  QUOTA_SET},
00444     {"total",           1,  CA_WIZARD,  QUOTA_TOT|SW_MULTIPLE},
00445     { NULL,             0,          0,  0}
00446 };
00447 
00448 static NAMETAB say_sw[] =
00449 {
00450     {"noeval",          1,  CA_PUBLIC,  SAY_NOEVAL|SW_NOEVAL|SW_MULTIPLE},
00451     { NULL,             0,          0,  0}
00452 };
00453 
00454 static NAMETAB set_sw[] =
00455 {
00456     {"quiet",           1,  CA_PUBLIC,  SET_QUIET},
00457     { NULL,             0,          0,  0}
00458 };
00459 
00460 static NAMETAB stats_sw[] =
00461 {
00462     {"all",             1,  CA_PUBLIC,  STAT_ALL},
00463     {"me",              1,  CA_PUBLIC,  STAT_ME},
00464     {"player",          1,  CA_PUBLIC,  STAT_PLAYER},
00465     { NULL,             0,          0,  0}
00466 };
00467 
00468 static NAMETAB sweep_sw[] =
00469 {
00470     {"commands",        3,  CA_PUBLIC,  SWEEP_COMMANDS|SW_MULTIPLE},
00471     {"connected",       3,  CA_PUBLIC,  SWEEP_CONNECT|SW_MULTIPLE},
00472     {"exits",           1,  CA_PUBLIC,  SWEEP_EXITS|SW_MULTIPLE},
00473     {"here",            1,  CA_PUBLIC,  SWEEP_HERE|SW_MULTIPLE},
00474     {"inventory",       1,  CA_PUBLIC,  SWEEP_ME|SW_MULTIPLE},
00475     {"listeners",       1,  CA_PUBLIC,  SWEEP_LISTEN|SW_MULTIPLE},
00476     {"players",         1,  CA_PUBLIC,  SWEEP_PLAYER|SW_MULTIPLE},
00477     { NULL,             0,          0,  0}
00478 };
00479 
00480 static NAMETAB switch_sw[] =
00481 {
00482     {"all",             1,  CA_PUBLIC,  SWITCH_ANY},
00483     {"default",         1,  CA_PUBLIC,  SWITCH_DEFAULT},
00484     {"first",           1,  CA_PUBLIC,  SWITCH_ONE},
00485     { NULL,             0,          0,  0}
00486 };
00487 
00488 static NAMETAB teleport_sw[] =
00489 {
00490     {"list",            1,  CA_PUBLIC,  TELEPORT_LIST|SW_MULTIPLE},
00491     {"loud",            1,  CA_PUBLIC,  TELEPORT_DEFAULT},
00492     {"quiet",           1,  CA_PUBLIC,  TELEPORT_QUIET},
00493     { NULL,             0,          0,  0}
00494 };
00495 
00496 static NAMETAB timecheck_sw[] =
00497 {
00498     {"log",             1,  CA_WIZARD,  TIMECHK_LOG | SW_MULTIPLE},
00499     {"reset",           1,  CA_WIZARD,  TIMECHK_RESET | SW_MULTIPLE},
00500     {"screen",          1,  CA_WIZARD,  TIMECHK_SCREEN | SW_MULTIPLE},
00501     { NULL,             0,          0,  0}
00502 };
00503 
00504 static NAMETAB toad_sw[] =
00505 {
00506     {"no_chown",        1,  CA_WIZARD,  TOAD_NO_CHOWN|SW_MULTIPLE},
00507     { NULL,             0,          0,  0}
00508 };
00509 
00510 static NAMETAB trig_sw[] =
00511 {
00512     {"quiet",           1,  CA_PUBLIC,  TRIG_QUIET},
00513     { NULL,             0,          0,  0}
00514 };
00515 
00516 static NAMETAB wait_sw[] =
00517 {
00518     {"until",           1,  CA_PUBLIC, WAIT_UNTIL},
00519     { NULL,             0,          0,  0}
00520 };
00521 
00522 static NAMETAB wall_sw[] =
00523 {
00524     {"admin",           1,  CA_ADMIN,    SHOUT_ADMINSHOUT},
00525     {"emit",            1,  CA_ANNOUNCE, SHOUT_WALLEMIT},
00526     {"no_prefix",       1,  CA_ANNOUNCE, SAY_NOTAG|SW_MULTIPLE},
00527     {"pose",            1,  CA_ANNOUNCE, SHOUT_WALLPOSE},
00528     {"wizard",          1,  CA_ANNOUNCE, SHOUT_WIZSHOUT|SW_MULTIPLE},
00529     { NULL,             0,          0,  0}
00530 };
00531 
00532 static NAMETAB warp_sw[] =
00533 {
00534     {"check",           1,  CA_WIZARD,  TWARP_CLEAN|SW_MULTIPLE},
00535     {"dump",            1,  CA_WIZARD,  TWARP_DUMP|SW_MULTIPLE},
00536     {"events",          1,  CA_WIZARD,  TWARP_EVENTS|SW_MULTIPLE},
00537     {"idle",            1,  CA_WIZARD,  TWARP_IDLE|SW_MULTIPLE},
00538     {"queue",           1,  CA_WIZARD,  TWARP_QUEUE|SW_MULTIPLE},
00539     { NULL,             0,          0,  0}
00540 };
00541 
00542 
00543 /* ---------------------------------------------------------------------------
00544  * Command table: Definitions for builtin commands, used to build the command
00545  * hash table.
00546  *
00547  * Format:  Name        Switches    Permissions Needed
00548  *  Key (if any)    Calling Seq         Handler
00549  */
00550 static CMDENT_NO_ARG command_table_no_arg[] =
00551 {
00552     {"@@",          NULL,       CA_PUBLIC,   0,          CS_NO_ARGS, 0, do_comment},
00553     {"@backup",     NULL,       CA_WIZARD,   0,          CS_NO_ARGS, 0, do_backup},
00554     {"@dbck",       dbck_sw,    CA_WIZARD,   0,          CS_NO_ARGS, 0, do_dbck},
00555     {"@dbclean",    NULL,       CA_GOD,      0,          CS_NO_ARGS, 0, do_dbclean},
00556     {"@dump",       dump_sw,    CA_WIZARD,   0,          CS_NO_ARGS, 0, do_dump},
00557     {"@mark_all",   markall_sw, CA_WIZARD,   MARK_SET,   CS_NO_ARGS, 0, do_markall},
00558     {"@readcache",  NULL,       CA_WIZARD,   0,          CS_NO_ARGS, 0, do_readcache},
00559     {"@restart",    NULL,       CA_NO_GUEST|CA_NO_SLAVE, 0, CS_NO_ARGS, 0, do_restart},
00560 #ifndef WIN32
00561     {"@startslave", NULL,       CA_WIZARD,   0,          CS_NO_ARGS, 0, boot_slave},
00562 #endif // !WIN32
00563     {"@timecheck",  timecheck_sw, CA_WIZARD, 0,          CS_NO_ARGS, 0, do_timecheck},
00564     {"clearcom",    NULL,       CA_NO_SLAVE, 0,          CS_NO_ARGS, 0, do_clearcom},
00565     {"info",        NULL,       CA_PUBLIC,   CMD_INFO,   CS_NO_ARGS, 0, logged_out0},
00566     {"inventory",   NULL,       CA_PUBLIC,   0,          CS_NO_ARGS, 0, do_inventory},
00567     {"leave",       leave_sw,   CA_LOCATION, 0,          CS_NO_ARGS, 0, do_leave},
00568     {"logout",      NULL,       CA_PUBLIC,   CMD_LOGOUT, CS_NO_ARGS, 0, logged_out0},
00569     {"quit",        NULL,       CA_PUBLIC,   CMD_QUIT,   CS_NO_ARGS, 0, logged_out0},
00570     {"report",      NULL,       CA_PUBLIC,   0,          CS_NO_ARGS, 0, do_report},
00571     {"score",       NULL,       CA_PUBLIC,   0,          CS_NO_ARGS, 0, do_score},
00572     {"version",     NULL,       CA_PUBLIC,   0,          CS_NO_ARGS, 0, do_version},
00573     {NULL,          NULL,       0,           0,          0,          0, NULL}
00574 };
00575 
00576 static CMDENT_ONE_ARG command_table_one_arg[] =
00577 {
00578     {"@boot",         boot_sw,    CA_NO_GUEST|CA_NO_SLAVE,    0,  CS_ONE_ARG|CS_INTERP, 0, do_boot},
00579     {"@break",        NULL,       CA_PUBLIC,                  0,  CS_ONE_ARG,           0, do_break},
00580     {"@ccreate",      NULL,       CA_NO_SLAVE|CA_NO_GUEST,    0,  CS_ONE_ARG,           0, do_createchannel},
00581     {"@cdestroy",     NULL,       CA_NO_SLAVE|CA_NO_GUEST,    0,  CS_ONE_ARG,           0, do_destroychannel},
00582     {"@clist",        clist_sw,   CA_NO_SLAVE,                0,  CS_ONE_ARG,           0, do_chanlist},
00583     {"@cut",          NULL,       CA_WIZARD|CA_LOCATION,      0,  CS_ONE_ARG|CS_INTERP, 0, do_cut},
00584     {"@cwho",         NULL,       CA_NO_SLAVE,                0,  CS_ONE_ARG,           0, do_channelwho},
00585     {"@destroy",      destroy_sw, CA_NO_SLAVE|CA_NO_GUEST|CA_GBL_BUILD, DEST_ONE,   CS_ONE_ARG|CS_INTERP,   0, do_destroy},
00586     {"@disable",      NULL,       CA_WIZARD,       GLOB_DISABLE,  CS_ONE_ARG,           0, do_global},
00587     {"@doing",        doing_sw,   CA_PUBLIC,                  0,  CS_ONE_ARG,           0, do_doing},
00588     {"@emit",         emit_sw,    CA_LOCATION|CA_NO_GUEST|CA_NO_SLAVE,  SAY_EMIT,   CS_ONE_ARG|CS_INTERP,   0, do_say},
00589     {"@enable",       NULL,       CA_WIZARD,        GLOB_ENABLE,  CS_ONE_ARG,           0, do_global},
00590     {"@entrances",    NULL,       CA_NO_GUEST,                0,  CS_ONE_ARG|CS_INTERP, 0, do_entrances},
00591     {"@find",         NULL,       CA_PUBLIC,                  0,  CS_ONE_ARG|CS_INTERP, 0, do_find},
00592     {"@halt",         halt_sw,    CA_NO_SLAVE,                0,  CS_ONE_ARG|CS_INTERP, 0, do_halt},
00593     {"@hook",         hook_sw,    CA_GOD,                     0,  CS_ONE_ARG|CS_INTERP, 0, do_hook},
00594     {"@kick",         NULL,       CA_WIZARD,         QUEUE_KICK,  CS_ONE_ARG|CS_INTERP, 0, do_queue},
00595     {"@last",         NULL,       CA_NO_GUEST,                0,  CS_ONE_ARG|CS_INTERP, 0, do_last},
00596     {"@list",         NULL,       CA_PUBLIC,                  0,  CS_ONE_ARG|CS_INTERP, 0, do_list},
00597     {"@list_file",    NULL,       CA_WIZARD,                  0,  CS_ONE_ARG|CS_INTERP, 0, do_list_file},
00598     {"@listcommands", NULL,       CA_GOD,                     0,  CS_ONE_ARG,           0, do_listcommands},
00599     {"@listmotd",     listmotd_sw,CA_PUBLIC,          MOTD_LIST,  CS_ONE_ARG,           0, do_motd},
00600     {"@mark",         mark_sw,    CA_WIZARD,          SRCH_MARK,  CS_ONE_ARG|CS_NOINTERP,   0, do_search},
00601     {"@motd",         motd_sw,    CA_WIZARD,                  0,  CS_ONE_ARG,           0, do_motd},
00602     {"@nemit",        emit_sw,    CA_LOCATION|CA_NO_GUEST|CA_NO_SLAVE, SAY_EMIT, CS_ONE_ARG|CS_UNPARSE|CS_NOSQUISH, 0, do_say},
00603     {"@poor",         NULL,       CA_GOD,                     0,  CS_ONE_ARG|CS_INTERP, 0, do_poor},
00604     {"@ps",           ps_sw,      CA_PUBLIC,                  0,  CS_ONE_ARG|CS_INTERP, 0, do_ps},
00605     {"@quitprogram",  NULL,       CA_PUBLIC,                  0,  CS_ONE_ARG|CS_INTERP, 0, do_quitprog},
00606     {"@search",       NULL,       CA_PUBLIC,        SRCH_SEARCH,  CS_ONE_ARG|CS_NOINTERP,   0, do_search},
00607     {"@shutdown",     NULL,       CA_NO_GUEST|CA_NO_SLAVE,    0,  CS_ONE_ARG,           0, do_shutdown},
00608     {"@stats",        stats_sw,   CA_PUBLIC,                  0,  CS_ONE_ARG|CS_INTERP, 0, do_stats},
00609     {"@sweep",        sweep_sw,   CA_PUBLIC,                  0,  CS_ONE_ARG,           0, do_sweep},
00610     {"@timewarp",     warp_sw,    CA_WIZARD,                  0,  CS_ONE_ARG|CS_INTERP, 0, do_timewarp},
00611     {"@unlink",       NULL,       CA_NO_SLAVE|CA_GBL_BUILD,   0,  CS_ONE_ARG|CS_INTERP, 0, do_unlink},
00612     {"@unlock",       lock_sw,    CA_NO_SLAVE,                0,  CS_ONE_ARG|CS_INTERP, 0, do_unlock},
00613     {"@wall",         wall_sw,    CA_ANNOUNCE,      SHOUT_SHOUT,  CS_ONE_ARG|CS_INTERP, 0, do_shout},
00614     {"@wipe",         NULL,       CA_NO_SLAVE|CA_NO_GUEST|CA_GBL_BUILD, 0,  CS_ONE_ARG|CS_INTERP,   0, do_wipe},
00615     {"allcom",        NULL,       CA_NO_SLAVE,                0,  CS_ONE_ARG,           0, do_allcom},
00616     {"comlist",       NULL,       CA_NO_SLAVE,                0,  CS_ONE_ARG,           0, do_comlist},
00617     {"delcom",        NULL,       CA_NO_SLAVE,                0,  CS_ONE_ARG,           0, do_delcom},
00618     {"doing",         NULL,       CA_PUBLIC,          CMD_DOING,  CS_ONE_ARG,           0, logged_out1},
00619     {"drop",          drop_sw,    CA_NO_SLAVE|CA_CONTENTS|CA_LOCATION|CA_NO_GUEST,  0,  CS_ONE_ARG|CS_INTERP,   0, do_drop},
00620     {"enter",         enter_sw,   CA_LOCATION,                0,  CS_ONE_ARG|CS_INTERP, 0, do_enter},
00621     {"examine",       examine_sw, CA_PUBLIC,                  0,  CS_ONE_ARG|CS_INTERP, 0, do_examine},
00622     {"get",           get_sw,     CA_LOCATION|CA_NO_GUEST,    0,  CS_ONE_ARG|CS_INTERP, 0, do_get},
00623     {"goto",          goto_sw,    CA_LOCATION,                0,  CS_ONE_ARG|CS_INTERP, 0, do_move},
00624     {"look",          look_sw,    CA_LOCATION,        LOOK_LOOK,  CS_ONE_ARG|CS_INTERP, 0, do_look},
00625     {"outputprefix",  NULL,       CA_PUBLIC,         CMD_PREFIX,  CS_ONE_ARG,           0, logged_out1},
00626     {"outputsuffix",  NULL,       CA_PUBLIC,         CMD_SUFFIX,  CS_ONE_ARG,           0, logged_out1},
00627     {"pose",          pose_sw,    CA_LOCATION|CA_NO_SLAVE,  SAY_POSE,   CS_ONE_ARG|CS_INTERP,   0, do_say},
00628     {"puebloclient",  NULL,       CA_PUBLIC,   CMD_PUEBLOCLIENT,  CS_ONE_ARG,           0, logged_out1},
00629     {"say",           say_sw,     CA_LOCATION|CA_NO_SLAVE,  SAY_SAY,    CS_ONE_ARG|CS_INTERP,   0, do_say},
00630     {"session",       NULL,       CA_PUBLIC,        CMD_SESSION,  CS_ONE_ARG,           0, logged_out1},
00631     {"think",         NULL,       CA_NO_SLAVE,                0,  CS_ONE_ARG,           0, do_think},
00632     {"train",         NULL,       CA_PUBLIC,                  0,  CS_ONE_ARG,           0, do_train},