empserver/include/nsc.h

166 lines
5.1 KiB
C

/*
* Empire - A multi-player, client/server Internet based war game.
* Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
* Ken Stevens, Steve McClure
*
* This program 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.
*
* This program 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; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* ---
*
* See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
* related information and legal notices. It is expected that any future
* projects/authors will amend these files as needed.
*
* ---
*
* nsc.h: Definitions for Empire conditionals
*
* Known contributors to this file:
* Dave Pare, 1989
*/
#ifndef _NSC_H_
#define _NSC_H_
#include "prototype.h"
#include "xy.h"
#define NS_LSIZE 128
#define NS_NCOND 16
struct nscstr {
long fld1; /* first commodity or number */
long fld2; /* second commodity or number */
int oper; /* required relationship operator */
};
struct nstr_sect {
coord x, y; /* current x-y */
coord dx, dy; /* accumlated x,y travel */
int id; /* return value of sctoff */
int type; /* type of query */
int curdist; /* dist query: current range */
struct range range; /* area of coverage */
int dist; /* dist query: range */
coord cx, cy; /* dist query: center x-y */
int (*read) (); /* read function */
int ncond; /* # of selection conditions */
struct nscstr cond[NS_NCOND]; /* selection conditions */
};
struct nstr_item {
int cur; /* current item */
int sel; /* selection type */
int type; /* item type being selected */
int curdist; /* if NS_DIST, current item's dist */
struct range range; /* NS_AREA/NS_DIST: range selector */
int dist; /* NS_DIST: distance selector */
coord cx, cy; /* NS_DIST: center x-y, NS_XY: xy */
int group; /* NS_GROUP: fleet/wing match */
int size; /* NS_LIST: size of list */
int index; /* NS_LIST: index */
int list[NS_LSIZE]; /* NS_LIST: item list */
int (*read) (); /* read function */
int flags; /* EFF_ flags */
int ncond; /* # of selection conditions */
struct nscstr cond[NS_NCOND]; /* selection conditions */
};
#define NS_UNDEF 0
#define NS_LIST 1
#define NS_DIST 2
#define NS_AREA 3
#define NS_ALL 4
#define NS_XY 5
#define NS_GROUP 6
/*
* looks something like this:
* D: only deity can query on this field
* R: round this value to the nearest 10 if not owner
* T: type of pointer.
* C: catagory of value.
* V: value.
*
* 22 2 1 1 1
* 32 0 8 6 2 8 4 0
* xxxx xxxx xxxx xxxx xxxx xxxx
* DRTT TTCC VVVV VVVV VVVV VVVV
*/
/*
* catagories
*/
#define NSC_VAL (0) /* normal number */
#define NSC_VAR (1<<16) /* is a vtype */
#define NSC_OFF (2<<16) /* is an offset */
#define NSC_CMASK (3<<16)
/*
* how to interpret "offset" fields
*/
#define NSC_CHAR (1<<18) /* pointer to s_char */
#define NSC_UCHAR (2<<18) /* pointer to uchar */
#define NSC_SHORT (3<<18) /* pointer to short */
#define NSC_USHORT (4<<18) /* pointer to unsigned short */
#define NSC_INT (5<<18) /* pointer to int */
#define NSC_LONG (6<<18) /* pointer to long */
#define NSC_XCOORD (7<<18) /* pointer to short that needs x conversion */
#define NSC_YCOORD (8<<18) /* pointer to short that needs y conversion */
#define NSC_FLOAT (9<<18) /* pointer to float */
#define NSC_CHARP (10<<18) /* pointer to string pointer */
#define NSC_TIME (11<<18) /* pointer to time_t */
#define NSC_TMASK (15<<18)
#define NSC_NATID NSC_UCHAR /* change if natid typedef changes */
#define NSC_MASK (0xffff0000)
#define NSC_ROUND (1<<22)
#define NSC_DEITY (1<<23)
struct castr {
long ca_code; /* encoded form */
s_char *ca_name; /* name used for matches */
u_short ca_len; /* Used for arrays */
long ca_edv; /* which commands is this field visible to? */
};
/* variables using the above */
extern struct castr var_ca[];
extern struct castr sect_ca[];
extern struct castr ship_ca[];
extern struct castr plane_ca[];
extern struct castr land_ca[];
extern struct castr nuke_ca[];
extern struct castr news_ca[];
extern struct castr nat_ca[];
extern struct castr treaty_ca[];
extern struct castr trade_ca[];
extern struct castr loan_ca[];
extern struct castr genitem_ca[];
extern struct castr map_ca[];
extern struct castr bmp_ca[];
extern struct castr commodity_ca[];
/* src/lib/subs/nstr.c */
extern s_char *nstr_comp(struct nscstr *, int *, int, s_char *);
extern int encode(register s_char *, long *, int);
extern s_char *decodep _PROTO((register long code, register void *addr));
#endif /* _NSC_H_ */