/* MUSH specific defines. Gawd, I hate MUSH!!!!!! --Howard 3-23-93 Copyright notice included from the PennMUSH 1.50 software at the end of this file. PLEASE GO READ IT */ #include "interface.h" #include "db.h" #include "match.h" #define SUN_OS #define DO_GLOBALS #define MUSH_VERSION "2.0.BETA" /* What verison are we slinging? */ /* maximum comma's arguments to function */ #ifdef HAVE_VAR_LOCAL_VAR #define MAX_MUSH_ARG (o_max_mush_args) #else #define MAX_MUSH_ARG 100 #endif /* Maximum number of commands per time slice */ #define MAX_MUSH_QUEUE (o_max_mush_queue) /* max number of queued command at any time */ #define QUEUE_QUOTA (o_queue_quota) /* Cost of queued commands */ #define Q_COST (o_queue_cost) /* excessive recursion prevention */ #define MAX_NEST_LEVEL (o_max_nest_level) /* Don't let the parents get tooo deep */ #define MAX_PARENTS (o_max_parents) /* The MUSH MASTER ROOM. Where GLOBAL MUSH objects are kept. */ /* Do NOT, I repeat do NOT make this the same as the GLOBAL_ENVIRONMENT */ #define MASTER_ROOM (o_master_room) #define SBUF_LEN 32 /* Temp buff */ /* exec FLAGS */ #define EV_FMAND 0x0100 /* text before () must be a function name */ #define EV_FCHECK 0x0200 /* check text before () for function name */ #define EV_STRIP 0x0400 /* strip a level of brackets */ #define EV_EVAL 0x0800 /* evaluate results before returning */ /* Defines */ #define FN_REG 0 #define FN_NOPARSE 1 #define MAX_GLOBAL_FNS 50 #define GLOBAL_OFFSET 100 #define ANY_OWNER 99 #define ATR_HASH_SIZE 128 #define ATR_HASH_MASK 127 /* Miscellaneous MUSH flags */ #define CHECK_INVENTORY 0x10 #define CHECK_NEIGHBORS 0x20 #define CHECK_SELF 0x40 #define CHECK_HERE 0x80 #define CHECK_ZONE 0x100 #define CHECK_GLOBAL 0x200 /* Macros */ #define safe_str(s,b,p) safe_copy_str(s,b,p,BUFFER_LEN - 1) #define safe_short_str(s,b,p) safe_copy_str(s,b,p,SBUF_LEN - 1) #define quiet_notify(p,m) notify_check(p,m,0) #define GF_Index(x) (x - GLOBAL_OFFSET) #define Contents(x) (DBFETCH(x)->contents) #define Location(x) (DBFETCH(x)->location) #define Global_Funcs(x) Wizard(x) #define Home(x) (DBFETCH(x)->exits) #define Zone(x) ((dbref) -1) #define HugeQueue(x) (Wizard(x)) #define LookQueue(x) (Wizard(x)) #define notify_noecho(p,m) notify_check(p,m,1) #define IfSwitch(string) if (string_prefix((string), slashp)) #define Listen(x) (find_property(x, "LISTEN", ACCESS_WI)) #define Mobile(x) ((Typeof(x) == TYPE_PLAYER) || (Typeof(x) == TYPE_THING)) #define Can_Locate(p,x) (controls(p,x) || nearby(p,x) || Wizard(p) \ || Findable(x)) #define Can_Examine(p,x) (controls(p,x) || Chown_Ok(x) || Visual(x)) #define DESC_ITER_CONN(d) \ for(d = descriptor_list;(d);d=(d)->next) \ if((d)->connected) /* Globals */ extern char rptr[10][BUFFER_LEN]; /* local registers */ extern dbref speaker; /* MUSH listener stuff */ /* MUSH specific BOOLS */ #define BOOLEXP_IND 5 #define BOOLEXP_CARRY 6 #define BOOLEXP_IS 7 #define BOOLEXP_OWNER 8 #define BOOLEXP_EVAL 9 #define AT_TOKEN '@' #define IN_TOKEN '+' #define IS_TOKEN '=' #define OWNER_TOKEN '$' /* MUSH specific LOCKS */ #define BASICLOCK 0 #define USELOCK 1 #define ENTERLOCK 2 /* Externs */ extern char *parse_to(char **dstr, char delim, int eflags); void do_medit(dbref player, dbref thing, char *q, char *argv[]); extern void do_config(dbref player, int type); extern void match_list(dbref first, match_data *md); extern void do_debug_examine(dbref player, char *name); extern void do_mush_unlock(dbref player, char *name, int locktype); extern boolexp *get_ue_locks(dbref player, dbref thing, int type); extern void do_use_enterlocks(dbref thing, char *lock, int lock_type, int add_rm); extern void mush_notify_except(dbref first, dbref exception, char *msg); extern dbref Parent(dbref thing); extern dbref_list *listcreate(dbref ref); extern void listfree(dbref_list *head); extern void listadd(dbref_list *head, dbref ref); extern char *strip_braces(char *line1); extern char *atr_get_noparent(dbref thing, char *atr); extern void atr_add(dbref player, char *atrname, char *buff); extern void do_switch(dbref player, char *exp, char *argv[], dbref cause, int first); extern void do_halt(dbref owner, char *ncom, dbref victim); extern void do_halt1(dbref player, char *arg1, char *arg2); extern void burst_object_command(); extern char *atr_get_noparent(dbref thing, char *atr); extern char *atr_get_fullname(dbref thing, char *atr); extern char *parse_arglist(dbref player, dbref cause, char *dstr, char delim,\ int eflags, char *fargs[], int nfargs); void notify_check(dbref player, char *msg, int no_puppet); extern void do_trigger(dbref player, char *objct, char *argv[]); extern void do_verb(dbref player, dbref cause, char *arg1, char *argv[]); extern void do_poor(dbref player, char *arg1); extern void do_lemit(dbref player, char *tbuf1); extern void do_enter(dbref player, char *what); extern void do_pemit(dbref player, char *arg1, char *arg2, int silent); extern void do_use(dbref player, char *what); extern void do_wipe(dbref player, char *name); extern void do_remit(dbref player, char *arg1, char *arg2); extern void do_oemit(dbref player, char *arg1, char *arg2); extern void do_emit(dbref player, char *tbuf1); void oemit_notify_except(dbref first, dbref exc1, dbref exc2, char *msg); void esnotify(dbref player, char *msg, dbref sender); void emit_notify_except(dbref first, dbref exception, char *msg); void safe_tel(dbref player, dbref dest); void decompile_flags(dbref player, dbref thing, char *objct); void decompile_atrs(dbref player, dbref thing, char *name, char *pattern); void do_search(dbref player, char *arg1, char *arg3[]); char *grep_util(dbref thing, char *pattern, char *lookfor, int len); extern void do_mush_prop_set(__DO_PROTO); extern void do_kick(dbref player, char *arg1); extern void do_dolist(dbref player, char *list, char *command, dbref cause, \ int flag); extern void did_it(dbref player, dbref thing, char *what, char *def, \ char *owhat, char *odef, char *awhat, dbref loc); void notify_except2(dbref first, dbref exc1, dbref exc2, char *msg); void propagate_sound(dbref thing, char *msg); void do_mid_halt(dbref player, char *arg1, char *arg2, char *slashp); void bind_and_queue(dbref player, dbref cause, char *action, char *arg); int filter_found(dbref thing, char *msg, int flag); extern int giveto(dbref who, int cost); extern char *exec(dbref cause, char *str, dbref player, int eflags); /* Function Defs */ #define FUNCTION(x) \ static void (x)(buff, args, nargs, privs, doer) \ char *buff; \ char *args[10]; \ int nargs; \ dbref privs; \ dbref doer; #define GLOBAL_FUN(x) \ static void (x)(buff, args, nargs, privs, doer, fn_num) \ char *buff; \ char *args[10]; \ int nargs; \ dbref privs; \ dbref doer; \ int fn_num; #define XFUNCTION(x) \ void (x)(buff, args, nargs, privs, doer) \ char *buff; \ char *args[10]; \ int nargs; \ dbref privs; \ dbref doer; /* * Copyright Notice for PennMUSH 1.50 * * TinyMUSH 1.x Source code * Based on TinyMUD code * * -*-C-*- * * Copyright (c) 1989, 1990 by David Applegate, James Aspnes, * Timothy Freeman, and Bennet Yee. * * This material was developed by the above-mentioned authors. Permission to * copy this software, to redistribute it, and to use it for any purpose is * granted, subject to the following restrictions and understandings. * * 1. Any copy made of this software must include this copyright notice * in full. * * 2. Users of this software agree to make their best efforts (a) to return to * the above-mentioned authors any improvements or extensions that they make, * so that these may be included in future releases; and (b) to inform the * authors of noteworthy uses of this software. * * 3. All materials developed as a consequence of the use of this software * shall duly acknowledge such use, in accordance with the usual standards of * acknowledging credit in academic research. * * 4. The authors have made no warrantee or representation that the operation * of this software will be error-free, and the authors are under no obligation * to provide any services, by way of maintenance, update, or otherwise. * * 5. In conjunction with products arising from the use of this material, there * shall be no use of the names of the authors, of Carnegie-Mellon * University, nor of any adaptation thereof in any advertising, promotional, * or sales literature without prior written consent from the authors and * Carnegie-Mellon University in each case. * * The original TinyMUD code has been heavily modified by Lawrence Foard. This * code is presently in a constant state of change and is known to contain * some unresolved bugs. It is given out on an as is basis. I ask only that I * be given credit for additional features I have created ( @destroy,@asucc * etc). * * Credits (for borrowed ideas &| code): Robert Hood (virus): Modified the * interface.c code to support alots of users. Lachesis: Introduced the idea * of property lists to TinyMUCK Many others: Many features borrowed from * other muds. * *--- * * This code is heavily based on the micromush code which in turn was based on * the mush code. I have modified it quite a bit since then as detailed in * the file CHANGES. -- Moonchilde (JT Traub, jt1o@andrew.cmu.edu) * *--- * * This code is based on the Pern code which Moonchilde stopped supporting * when PernMUSH itself went to 2.0. The file CHANGES-1 now details * Moonchilde's extensive modifications (PernMUSH 1.02 through 1.15). * The file CHANGES-2 now contains my modifications (PernMUSH 1.16, and * PennMUSH 1.17 to 1.19). PennMUSH 1.50.p1 changes and beyond are * in CHANGES-3. * * This source code may not be copied, in part or in full, without * acknowledgement of the authors. The same is true of the help text. * * -- Amberyl (Lydia Leong, lwl@eniac.seas.upenn.edu) * * Additional credits: * * Moonchilde and Ambar: Answered my occasional screams for help. * Ambar also did a lot of bugfixing in versions 1.14 and 1.15. * Delta@Twilight: Added much of the HP-UX compatibility. * Jim Miller: Provided pointers to a few problems in the code which had been overlooked for quite some time. * Annalyn@PernMUSH, Javelin@Belgariad, Talek@Belgariad, and lots of others: * Contributed lots and lots of good ideas. * TinyMUSH 2.0 and the mushhacks: Answered lots of questions, * contributed many ideas, and in general acted extremely helpful. * A small portion of this code is taken from TinyMUSH 2.0. * Such sections are clearly marked with "taken from the 2.0 code". * The parser is mostly from 2.0 (the end section of eval.c), with * some modifications; this author is grateful for the use of the * TinyMUSH 2.0 parser code. * Rosse@PernMUSH: Answered lots of probably inane coding questions, * and providing help in tracking down various problems. * Henrik, Kheldar, and other Belgariad players: Did a fair amount * of testing on the new parser and were very patient in figuring * out test cases that went wrong and waiting for bugs to be fixed. * Zakath, Garion, Varana, and Geran of the the Belgariad, Tiercel@Pern, * and the rest of the Penn MUSHers: Kept me sane and dragged me away * from my terminal when necessary. :) * The rest of the Belgariad wiz team: Durnik for sanity checks, and * everyone else for putting up with the occasional weird code bug. * * TinyMUSH 2.0 is Copyright (c) 1991 Joseph Traub and Glenn Crocker. * If you use of sections of this code which contain source code from 2.0, * you must retain this copyright notice. * * Ported to DaemonMUCK 0.14 on March 23, 1993 by Howard. * * THIS CODE MAY NOT BE USED COMMERCIALLY. * */ /* MUSH 2.0 Copyright */ /* * TinyMUSH 2.0 Source code * Copyright (c) 1991 Joseph Traub and Glenn Crocker * * Based on TinyMUD code * Copyright (c) 1989, 1990 by David Applegate, James Aspnes, Timothy Freeman, * and Bennet Yee. * * This material was developed by the above-mentioned authors. Permission to * copy this software, to redistribute it, and to use it for any purpose is * granted, subject to the following restrictions and understandings. * * 1. Any copy made of this software must include this copyright notice in * full. * * 2. Users of this software agree to make their best efforts * (a) to return to the above-mentioned authors any improvements or * extensions that they make, so that these may be included in future * releases; and * (b) to inform the authors of noteworthy uses of this software. * * 3. All materials developed as a consequence of the use of this software * shall duly acknowledge such use, in accordance with the usual standards * of acknowledging credit in academic research. * * 4. The authors have made no warrantee or representation that the operation * of this software will be error-free, and the authors are under no * obligation to provide any services, by way of maintenance, update, or * otherwise. * * 5. In conjunction with products arising from the use of this material, * there shall be no use of the names of the authors, of Carnegie-Mellon * University, nor of any adaptation thereof in any advertising, * promotional, or sales literature without prior written consent from * the authors and both Carnegie-Mellon University Case Wester Reserve * University in each case. * * Credits: * Lawrence Foard: * Wrote the original TinyMUSH 1.0 code from which this later derived. * Jin (and MicroMUSH): * Made many, many changes to the code that improved it immensely. * Robert Hood (virus): * Modified the interface.c code to support alots of users. * Lachesis: * Introduced the idea of property lists to TinyMUCK * Many others: * Many features borrowed from other muds. */