]> git.pond.sub.org Git - empserver/blob - include/nsc.h
Indented with src/scripts/indent-emp.
[empserver] / include / nsc.h
1 /*
2  *  Empire - A multi-player, client/server Internet based war game.
3  *  Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
4  *                           Ken Stevens, Steve McClure
5  *
6  *  This program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program; if not, write to the Free Software
18  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  *  ---
21  *
22  *  See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
23  *  related information and legal notices. It is expected that any future
24  *  projects/authors will amend these files as needed.
25  *
26  *  ---
27  *
28  *  nsc.h: Definitions for Empire conditionals
29  * 
30  *  Known contributors to this file:
31  *     Dave Pare, 1989
32  */
33
34 #ifndef _NSC_H_
35 #define _NSC_H_
36
37 #include "prototype.h"
38 #include "xy.h"
39
40 #define NS_LSIZE        128
41 #define NS_NCOND        16
42
43 struct nscstr {
44     long fld1;                  /* first commodity or number */
45     long fld2;                  /* second commodity or number */
46     int oper;                   /* required relationship operator */
47 };
48
49 struct nstr_sect {
50     coord x, y;                 /* current x-y */
51     coord dx, dy;               /* accumlated x,y travel */
52     int id;                     /* return value of sctoff */
53     int type;                   /* type of query */
54     int curdist;                /* dist query: current range */
55     struct range range;         /* area of coverage */
56     int dist;                   /* dist query: range */
57     coord cx, cy;               /* dist query: center x-y */
58     int (*read) ();             /* read function */
59     int ncond;                  /* # of selection conditions */
60     struct nscstr cond[NS_NCOND];       /* selection conditions */
61 };
62
63 struct nstr_item {
64     int cur;                    /* current item */
65     int sel;                    /* selection type */
66     int type;                   /* item type being selected */
67     int curdist;                /* if NS_DIST, current item's dist */
68     struct range range;         /* NS_AREA/NS_DIST: range selector */
69     int dist;                   /* NS_DIST: distance selector */
70     coord cx, cy;               /* NS_DIST: center x-y, NS_XY: xy */
71     int group;                  /* NS_GROUP: fleet/wing match */
72     int size;                   /* NS_LIST: size of list */
73     int index;                  /* NS_LIST: index */
74     int list[NS_LSIZE];         /* NS_LIST: item list */
75     int (*read) ();             /* read function */
76     int flags;                  /* EFF_ flags */
77     int ncond;                  /* # of selection conditions */
78     struct nscstr cond[NS_NCOND];       /* selection conditions */
79 };
80
81 #define NS_UNDEF        0
82 #define NS_LIST         1
83 #define NS_DIST         2
84 #define NS_AREA         3
85 #define NS_ALL          4
86 #define NS_XY           5
87 #define NS_GROUP        6
88
89 /*
90  * looks something like this:
91  * D: only deity can query on this field
92  * R: round this value to the nearest 10 if not owner
93  * T: type of pointer.
94  * C: catagory of value.
95  * V: value.
96  *
97  * 22 2  1 1    1
98  * 32 0  8 6    2    8    4    0
99  * xxxx xxxx xxxx xxxx xxxx xxxx
100  * DRTT TTCC VVVV VVVV VVVV VVVV
101  */
102
103 /*
104  * catagories
105  */
106 #define NSC_VAL         (0)     /* normal number */
107 #define NSC_VAR         (1<<16) /* is a vtype */
108 #define NSC_OFF         (2<<16) /* is an offset */
109 #define NSC_CMASK       (3<<16)
110
111 /*
112  * how to interpret "offset" fields
113  */
114 #define NSC_CHAR        (1<<18) /* pointer to s_char */
115 #define NSC_UCHAR       (2<<18) /* pointer to uchar */
116 #define NSC_SHORT       (3<<18) /* pointer to short */
117 #define NSC_USHORT      (4<<18) /* pointer to unsigned short */
118 #define NSC_INT         (5<<18) /* pointer to int */
119 #define NSC_LONG        (6<<18) /* pointer to long */
120 #define NSC_XCOORD      (7<<18) /* pointer to short that needs x conversion */
121 #define NSC_YCOORD      (8<<18) /* pointer to short that needs y conversion */
122 #define NSC_FLOAT       (9<<18) /* pointer to float */
123 #define NSC_CHARP       (10<<18)        /* pointer to string pointer */
124 #define NSC_TIME        (11<<18)        /* pointer to time_t */
125 #define NSC_TMASK       (15<<18)
126
127 #define NSC_NATID       NSC_UCHAR       /* change if natid typedef changes */
128
129 #define NSC_MASK        (0xffff0000)
130
131 #define NSC_ROUND       (1<<22)
132 #define NSC_DEITY       (1<<23)
133
134 struct castr {
135     long ca_code;               /* encoded form */
136     s_char *ca_name;            /* name used for matches */
137     u_short ca_len;             /* Used for arrays */
138     long ca_edv;                /* which commands is this field visible to? */
139 };
140
141 /* variables using the above */
142
143 extern struct castr var_ca[];
144 extern struct castr sect_ca[];
145 extern struct castr ship_ca[];
146 extern struct castr plane_ca[];
147 extern struct castr land_ca[];
148 extern struct castr nuke_ca[];
149 extern struct castr news_ca[];
150 extern struct castr nat_ca[];
151 extern struct castr treaty_ca[];
152 extern struct castr trade_ca[];
153 extern struct castr loan_ca[];
154 extern struct castr genitem_ca[];
155 extern struct castr map_ca[];
156 extern struct castr bmp_ca[];
157 extern struct castr ca[];
158 extern struct castr commodity_ca[];
159
160 /* src/lib/subs/nstr.c */
161 extern s_char *nstr_comp(struct nscstr *, int *, int, s_char *);
162 extern int encode(register s_char *, long *, int);
163
164
165 extern s_char *decodep _PROTO((register long code, register void *addr));
166
167 #endif /* _NSC_H_ */