/* ************************************************************************ * File: utils.h Part of CircleMUD * * Usage: header file: utility macros and prototypes of utility funcs * * * * All rights reserved. See license.doc for complete information. * * * * Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University * * CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991. * ************************************************************************ */ /* * Code from utils.h needed for world conversion process * * Same as the others. If you have made any changes, make sure they're * done here too. */ #ifndef __UTILS_H__ #define __UTILS_H__ #define READ_SIZE 256 #ifndef NULL #define NULL (void *)0 #endif #if !defined(FALSE) #define FALSE 0 #endif #if !defined(TRUE) #define TRUE (!FALSE) #endif #ifdef MAX #undef MAX #endif #ifdef MIN #undef MIN #endif int MAX(int a, int b); int MIN(int a, int b); #define CREATE(result, type, number) do {\ if ((number) * sizeof(type) <= 0) \ log("SYSERR: Zero bytes or less requested at %s:%d.", __FILE__, __LINE__); \ if (!((result) = (type *) calloc ((number), sizeof(type)))) \ { perror("SYSERR: malloc failure"); abort(); } } while(0) #define RECREATE(result,type,number) do {\ if (!((result) = (type *) realloc ((result), sizeof(type) * (number))))\ { perror("SYSERR: realloc failure"); abort(); } } while(0) #define YESNO(a) ((a) ? "YES" : "NO") #define ONOFF(a) ((a) ? "ON" : "OFF") #define LOWER(c) (((c)>='A' && (c) <= 'Z') ? ((c)+('a'-'A')) : (c)) #define UPPER(c) (((c)>='a' && (c) <= 'z') ? ((c)+('A'-'a')) : (c) ) #define IS_SET(flag,bit) ((flag) & (bit)) #define SET_BIT(var,bit) ((var) |= (bit)) #define REMOVE_BIT(var,bit) ((var) &= ~(bit)) #define TOGGLE_BIT(var,bit) ((var) ^= (bit)) #define VALID_OBJ_RNUM(obj) (GET_OBJ_RNUM(obj) <= top_of_objt && GET_OBJ_RNUM(obj) != NOTHING) #define GET_OBJ_TYPE(obj) ((obj)->obj_flags.type_flag) #define GET_OBJ_COST(obj) ((obj)->obj_flags.cost) #define GET_OBJ_RENT(obj) ((obj)->obj_flags.cost_per_day) #define GET_OBJ_AFFECT(obj) ((obj)->obj_flags.bitvector) #define GET_OBJ_EXTRA(obj) ((obj)->obj_flags.extra_flags) #define GET_OBJ_WEAR(obj) ((obj)->obj_flags.wear_flags) #define GET_OBJ_VAL(obj, val) ((obj)->obj_flags.value[(val)]) #define GET_OBJ_WEIGHT(obj) ((obj)->obj_flags.weight) #define GET_OBJ_TIMER(obj) ((obj)->obj_flags.timer) #define GET_OBJ_RNUM(obj) ((obj)->item_number) #define GET_OBJ_VNUM(obj) (VALID_OBJ_RNUM(obj) ? obj_index[GET_OBJ_RNUM(obj)].vnum : NOTHING) #define GET_OBJ_SPEC(obj) (VALID_OBJ_RNUM(obj) ? obj_proto[GET_OBJ_RNUM(obj)].func : NULL) #define IS_CORPSE(obj) (GET_OBJ_TYPE(obj) == ITEM_CONTAINER && \ GET_OBJ_VAL((obj), 3) == 1) #define CAN_WEAR(obj, part) OBJWEAR_FLAGGED((obj), (part)) #define IN_ROOM(ch) ((ch)->in_room) #define GET_WAS_IN(ch) ((ch)->was_in_room) #define GET_AGE(ch) (age(ch)->year) #define GET_PC_NAME(ch) ((ch)->player.name) #define GET_NAME(ch) (IS_NPC(ch) ? \ (ch)->player.short_descr : GET_PC_NAME(ch)) #define GET_TITLE(ch) ((ch)->player.title) #define GET_LEVEL(ch) ((ch)->player.level) #define GET_PASSWD(ch) ((ch)->player.passwd) #define GET_PFILEPOS(ch)((ch)->pfilepos) #define GET_CLASS(ch) ((ch)->player.chclass) #define GET_HOME(ch) ((ch)->player.hometown) #define GET_HEIGHT(ch) ((ch)->player.height) #define GET_WEIGHT(ch) ((ch)->player.weight) #define GET_SEX(ch) ((ch)->player.sex) #define GET_STR(ch) ((ch)->aff_abils.str) #define GET_ADD(ch) ((ch)->aff_abils.str_add) #define GET_DEX(ch) ((ch)->aff_abils.dex) #define GET_INT(ch) ((ch)->aff_abils.intel) #define GET_WIS(ch) ((ch)->aff_abils.wis) #define GET_CON(ch) ((ch)->aff_abils.con) #define GET_CHA(ch) ((ch)->aff_abils.cha) #define GET_EXP(ch) ((ch)->points.exp) #define GET_AC(ch) ((ch)->points.armor) #define GET_HIT(ch) ((ch)->points.hit) #define GET_MAX_HIT(ch) ((ch)->points.max_hit) #define GET_MOVE(ch) ((ch)->points.move) #define GET_MAX_MOVE(ch) ((ch)->points.max_move) #define GET_MANA(ch) ((ch)->points.mana) #define GET_MAX_MANA(ch) ((ch)->points.max_mana) #define GET_GOLD(ch) ((ch)->points.gold) #define GET_BANK_GOLD(ch) ((ch)->points.bank_gold) #define GET_HITROLL(ch) ((ch)->points.hitroll) #define GET_DAMROLL(ch) ((ch)->points.damroll) #define GET_POS(ch) ((ch)->char_specials.position) #define GET_IDNUM(ch) ((ch)->char_specials.saved.idnum) #define IS_CARRYING_W(ch) ((ch)->char_specials.carry_weight) #define IS_CARRYING_N(ch) ((ch)->char_specials.carry_items) #define FIGHTING(ch) ((ch)->char_specials.fighting) #define HUNTING(ch) ((ch)->char_specials.hunting) #define GET_SAVE(ch, i) ((ch)->char_specials.saved.apply_saving_throw[i]) #define GET_ALIGNMENT(ch) ((ch)->char_specials.saved.alignment) #define GET_DEFAULT_POS(ch) ((ch)->mob_specials.default_pos) #define MOB_FLAGS(ch) ((ch)->char_specials.saved.act) #define MOB_FLAGGED(ch, flag) (IS_NPC(ch) && IS_SET(MOB_FLAGS(ch), (flag))) #define IS_NPC(ch) (IS_SET(MOB_FLAGS(ch), MOB_ISNPC)) #define IS_MOB(ch) (IS_NPC(ch) && GET_MOB_RNUM(ch) <= top_of_mobt && \ GET_MOB_RNUM(ch) != NOBODY) #define VALID_ROOM_RNUM(rnum) ((rnum) != NOWHERE && (rnum) <= top_of_world) #define GET_ROOM_VNUM(rnum) ((room_vnum)(VALID_ROOM_RNUM(rnum) ? world[(rnum)].number : NOWHERE)) #define GET_MOB_RNUM(mob) ((mob)->nr) #define GET_MOB_VNUM(mob) (IS_MOB(mob) ? mob_index[GET_MOB_RNUM(mob)].vnum : NOBODY) #define EXIT_FLAGGED(exit, flag) (IS_SET((exit)->exit_info, (flag))) #define AFF_FLAGS(ch) ((ch)->char_specials.saved.affected_by) /* get_filename() */ #define CRASH_FILE (0) #define ETEXT_FILE (1) #define ALIAS_FILE (2) #define ZONE_FILE (3) int get_filename(char *filename, size_t fbufsize, int mode, const char *orig_name); int get_line(FILE *fl, char *buf); size_t strlcpy(char *dest, const char *source, size_t totalsize); char *CAP(char *txt); char *fname(const char *namelist); size_t sprinttype(int type, const char *names[], char *result, size_t reslen); #endif /* __UTILS_H__ */