/*-
* Copyright (c) 1998 fjoe <fjoe@iclub.nsu.ru>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: db.h,v 1.39 1999/04/16 15:52:23 fjoe Exp $
*/
#ifndef _DB_H_
#define _DB_H_
/***************************************************************************
* ANATOLIA 2.1 is copyright 1996-1997 Serdar BULUT, Ibrahim CANPUNAR *
* ANATOLIA has been brought to you by ANATOLIA consortium *
* Serdar BULUT {Chronos} bulut@rorqual.cc.metu.edu.tr *
* Ibrahim Canpunar {Asena} canpunar@rorqual.cc.metu.edu.tr *
* Murat BICER {KIO} mbicer@rorqual.cc.metu.edu.tr *
* D.Baris ACAR {Powerman} dbacar@rorqual.cc.metu.edu.tr *
* By using this code, you have agreed to follow the terms of the *
* ANATOLIA license, in the file Anatolia/anatolia.licence *
***************************************************************************/
/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* ROM 2.4 is copyright 1993-1995 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@pacinfo.com) *
* Gabrielle Taylor (gtaylor@pacinfo.com) *
* Brian Moore (rom@rom.efn.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Rom24/doc/rom.license *
***************************************************************************/
typedef struct dbdata DBDATA;
typedef void DBLOAD_FUN(DBDATA *dbdata, FILE *fp, void *arg);
#define DECLARE_DBLOAD_FUN(fun) DBLOAD_FUN fun
#define DBLOAD_FUN(fun) void fun(DBDATA *dbdata, FILE *fp, void *arg)
typedef void DBINIT_FUN(DBDATA *dbdata);
#define DECLARE_DBINIT_FUN(fun) DBINIT_FUN fun
#define DBINIT_FUN(fun) void fun(DBDATA *dbdata)
struct dbfun {
char * name;
DBLOAD_FUN * fun;
void * arg;
};
typedef struct dbfun DBFUN;
struct dbdata {
DBFUN * fun_tab; /* table of parsing functions */
DBINIT_FUN * dbinit; /* init function */
size_t tab_sz; /* table size */
};
extern DBDATA db_areas;
extern DBDATA db_clans;
extern DBDATA db_classes;
extern DBDATA db_hometowns;
extern DBDATA db_langs;
extern DBDATA db_races;
extern DBDATA db_skills;
extern DBDATA db_socials;
extern DBDATA db_system;
void db_load_file(DBDATA *, const char *path, const char *file);
void db_set_arg(DBDATA *, const char* name, void *arg);
extern int fBootDb;
void load_oldmsgdb (void);
void load_msgdb (void);
void load_notes (void);
void load_bans (void);
int xgetc (FILE *fp);
void xungetc (int c, FILE *fp);
void vnum_check (AREA_DATA *area, int vnum);
void convert_objects (void);
void convert_object (OBJ_INDEX_DATA *pObjIndex);
void reset_area (AREA_DATA * pArea);
void reset_room (ROOM_INDEX_DATA *pRoom);
char * fix_string (const char *s);
const char * fread_string (FILE *fp);
void fwrite_string (FILE *fp, const char *name, const char *str);
char fread_letter (FILE *fp);
int fread_number (FILE *fp);
flag64_t fread_flags (FILE *fp);
void fread_to_eol (FILE *fp);
char * fread_word (FILE *fp);
flag64_t fread_fword (const flag_t *table, FILE *fp);
flag64_t fread_fstring (const flag_t *table, FILE *fp);
void * fread_namedp (namedp_t *table, FILE *fp);
int fread_clan (FILE *fp);
extern char filename [PATH_MAX];
extern int line_number;
void db_error (const char* fn, const char* fmt, ...);
#define SLIST_ADD(type, list, item) \
{ \
if ((list) == NULL) \
(list) = (item); \
else { \
type *p; \
\
for (p = (list); p->next != NULL; p = p->next) \
; \
p->next = (item); \
} \
(item)->next = NULL; \
}
#define KEY(literal, field, value) \
if (!str_cmp(word, literal)) { \
field = value; \
fMatch = TRUE; \
break; \
}
#define SKEY(string, field) \
if (!str_cmp(word, string)) { \
free_string(field); \
field = fread_string(fp); \
fMatch = TRUE; \
break; \
}
#define MLSKEY(string, field) \
if (!str_cmp(word, string)) { \
mlstr_free(field); \
field = mlstr_fread(fp); \
fMatch = TRUE; \
break; \
}
extern int newmobs;
extern int newobjs;
extern MOB_INDEX_DATA * mob_index_hash [MAX_KEY_HASH];
extern OBJ_INDEX_DATA * obj_index_hash [MAX_KEY_HASH];
extern ROOM_INDEX_DATA *room_index_hash [MAX_KEY_HASH];
extern int top_mob_index;
extern int top_obj_index;
extern int top_vnum_mob;
extern int top_vnum_obj;
extern int top_vnum_room;
extern int top_affect;
extern int top_ed;
extern int top_area;
extern int top_exit;
extern int top_help;
extern int top_reset;
extern int top_room;
extern int top_shop;
extern int social_count;
extern AREA_DATA * area_first;
extern AREA_DATA * area_last;
extern AREA_DATA * area_current;
extern SHOP_DATA * shop_last;
#endif