/* teenydb.h */
#include "config.h"
/*
* This file is part of TeenyMUD II.
* Copyright(C) 1993, 1994, 1995 by Jason Downs.
* All rights reserved.
*
* TeenyMUD II is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* TeenyMUD II is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program (see the file 'COPYING'); if not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA.
*
*/
#ifndef __DB_H
/* database structures and such. */
/* user-def'd attribute struct. keep in sync with attrs.h! */
#define ATTR_STRING 0
#define ATTR_LOCK 1
struct attr {
short type;
char *name;
union {
char *str;
struct boolexp *lock;
} dat;
int flags;
/* these should always be last. */
struct attr *prev;
struct attr *next;
};
/* attribute search struct. keep in sync with attrs.h! */
struct asearch {
int elem;
struct attr *curr;
};
struct obj_data {
/* integer fields */
int quota;
int loc;
int contents;
int exits;
int rooms;
int timestamp;
int created;
int usecnt;
int charges;
int semaphores;
int cost;
int queue;
/* zero terminated strings. */
char *name;
/* user def'd attributes */
int attr_total; /* total number of user-def'd attributes */
#define ATTR_WIDTH 12 /* width of the attribute hash */
struct attr *attributes[ATTR_WIDTH];
/* for use by the caching system */
int objnum;
struct obj_data *fwd;
struct obj_data *back;
};
/* A typical memory resident descriptor. If it describes an actual object, it
* will be referenced by the main object index array, and the name field of
* the ptr union will be meaningful. If it describes a free chunk, the next
* field will be. We do it this way so objects can conveniently be destroyed.
*/
#ifndef FLAGS_LEN
#define FLAGS_LEN 2 /* number of words */
#endif
struct dsc {
int flags[FLAGS_LEN];
int owner;
union {
int home_dropto; /* home for things, dropto for rooms */
int *dests; /* destinations for exits. */
} dst;
int parent; /* object's attribute parent */
int size; /* Size on disk. */
int list_next; /* exits/contents/rooms lists. */
/* these should always go last. */
union {
struct obj_data *data;
struct dsc *next; /* free descriptor list */
} ptr;
};
/* the database. */
extern struct dsc **main_index;
#define DSC_DATA(_x) (((_x)->ptr).data)
#define DSC_SIZE(_x) ((_x)->size)
#define DSC_TYPE(_x) (((_x)->flags[0]) & TYPE_MASK)
#define DSC_FLAG1(_x) ((_x)->flags[0])
#define DSC_FLAG2(_x) ((_x)->flags[1])
#define DSC_FLAGS(_x) ((_x)->flags)
#define DSC_OWNER(_x) ((_x)->owner)
#define DSC_PARENT(_x) ((_x)->parent)
#define DSC_HOME(_x) (((_x)->dst).home_dropto)
#define DSC_DROPTO(_x) (((_x)->dst).home_dropto)
#define DSC_DESTS(_x) (((_x)->dst).dests)
#define DSC_NEXT(_x) ((_x)->list_next)
/* other internal macros */
#define _exists_object(_x) ((_x >= 0) && (_x < mudstat.total_objects) && \
(main_index[_x] != (struct dsc *)NULL))
/* dbm database layer flags. */
#define TEENY_DBMFAST 0x01
#define TEENY_DBMREAD 0x02
/* prototypes for the db layer */
/* from cache.c */
extern void cache_delete _ANSI_ARGS_((struct obj_data *));
extern void cache_touch _ANSI_ARGS_((struct obj_data *));
extern void cache_insert _ANSI_ARGS_((struct obj_data *));
/* from db.c */
extern struct obj_data *lookup_obj _ANSI_ARGS_((int));
extern void free_obj _ANSI_ARGS_((struct obj_data *));
/* from [bsd|g]dbm.c */
extern int disk_freeze _ANSI_ARGS_((struct obj_data *));
extern struct obj_data *disk_thaw _ANSI_ARGS_((int));
extern void disk_delete _ANSI_ARGS_((struct obj_data *));
/* from attributes.c */
extern int attr_hash _ANSI_ARGS_((char *));
extern struct attr *attr_first _ANSI_ARGS_((int, struct asearch *));
extern struct attr *attr_next _ANSI_ARGS_((int, struct asearch *));
extern void free_attributes _ANSI_ARGS_((struct attr *[]));
#define __DB_H
#endif /* __DB_H */