00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "copyright.h"
00018 #include "config.h"
00019
00020 #include "db.h"
00021 #include "externs.h"
00022 #include "mech.h"
00023 #include "macros.h"
00024 #include "p.glue.h"
00025
00026 void set_attr_internal(dbref player, dbref thing, int attrnum,
00027 char *attrtext, int key);
00028
00029 int bt_get_attr(char *tbuf, int obj, char *name)
00030 {
00031 ATTR *a;
00032 int ao, af;
00033
00034 if(!name)
00035 return 0;
00036 if(!(a = atr_str(name)))
00037 return 0;
00038 atr_get_str(tbuf, obj, a->number, &ao, &af);
00039 if(*tbuf)
00040 return 1;
00041 return 0;
00042 }
00043
00044 char *silly_atr_get(int id, int flag)
00045 {
00046 int i, j;
00047 static char buf[LBUF_SIZE];
00048
00049 atr_get_str(buf, id, flag, &i, &j);
00050 return buf;
00051 #if 0
00052 return atr_pget(id, flag, &i, &j);
00053 #endif
00054 }
00055
00056 void silly_atr_set(int id, int flag, char *dat)
00057 {
00058 atr_add_raw(id, flag, dat);
00059 }
00060
00061 void bt_set_attr(dbref obj, char *attri, char *value)
00062 {
00063 int attr;
00064
00065 ATTR *atr;
00066
00067 atr = atr_str(attri);
00068 attr = atr ? atr->number : mkattr(attri);
00069 set_attr_internal(GOD, obj, attr, value, SET_QUIET);
00070 }
00071
00072 void KillText(char **mapt)
00073 {
00074 int i;
00075
00076 for(i = 0; mapt[i]; i++)
00077 free(mapt[i]);
00078 free(mapt);
00079 }
00080
00081 void ShowText(char **mapt, dbref player)
00082 {
00083 int i;
00084
00085 for(i = 0; mapt[i]; i++)
00086 notify(player, mapt[i]);
00087 }
00088
00089 int BOUNDED(int min, int val, int max)
00090 {
00091 if(val < min)
00092 return min;
00093 if(val > max)
00094 return max;
00095 return val;
00096 }
00097
00098 float FBOUNDED(float min, float val, float max)
00099 {
00100 if(val < min)
00101 return min;
00102 if(val > max)
00103 return max;
00104 return val;
00105 }
00106
00107 int MAX(int v1, int v2)
00108 {
00109 if(v1 > v2)
00110 return v1;
00111 return v2;
00112 }
00113
00114 int MIN(int v1, int v2)
00115 {
00116 if(v1 < v2)
00117 return v1;
00118 return v2;
00119 }
00120
00121
00122
00123
00124
00125 char *first_parseattribute(char *buffer)
00126 {
00127
00128 int length;
00129 char *start, *first;
00130
00131
00132 start = buffer;
00133 length = strcspn(start, " \t=");
00134
00135
00136 if(length > SBUF_SIZE)
00137 length = SBUF_SIZE;
00138
00139
00140 first = (char *) strndup(start, length);
00141
00142 return first;
00143
00144 }
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175 int proper_parseattributes(char *buffer, char **args, int max)
00176 {
00177 int count = 0, iterator = 0, length;
00178 char *start, *finish;
00179
00180 memset(args, 0, sizeof(char *) * max);
00181
00182 start = buffer;
00183 while (count < (max - 1) && *start) {
00184 if(*start == '=') {
00185 args[count++] = strndup(start, 1);
00186 start++;
00187 continue;
00188 }
00189 length = strcspn(start, " \t=");
00190 args[count++] = strndup(start, length);
00191 start += length;
00192 if(*start != '=' && *start != '\x0')
00193 start++;
00194 }
00195 if(*start) {
00196 args[max - 1] = strdup(start);
00197 count++;
00198 }
00199 return count;
00200 }
00201
00202 int silly_parseattributes(char *buffer, char **args, int max)
00203 {
00204 char bufferi[LBUF_SIZE], foobuff[LBUF_SIZE];
00205 char *a, *b;
00206 int count = 0;
00207 char *parsed = buffer;
00208 int num_args = 0;
00209
00210 memset(args, 0, sizeof(char *) * max);
00211
00212 b = bufferi;
00213 for(a = buffer; *a && a; a++)
00214 if(*a == '=') {
00215 *(b++) = ' ';
00216 *(b++) = '=';
00217 *(b++) = ' ';
00218 } else
00219 *(b++) = *a;
00220 *b = 0;
00221
00222
00223 while ((count < max) && parsed) {
00224 if(!count) {
00225
00226 parsed = strtok(bufferi, " \t");
00227 } else {
00228 parsed = strtok(NULL, " \t");
00229 }
00230 args[count] = parsed;
00231 if(parsed)
00232 num_args++;
00233 count++;
00234
00235 }
00236
00237 if(args[max - 1] && args[max - 1][0]) {
00238 strcpy(foobuff, args[max - 1]);
00239 while ((parsed = strtok(NULL, " \t")))
00240 sprintf(foobuff + strlen(foobuff), " %s", parsed);
00241 args[max - 1] = foobuff;
00242 }
00243 return num_args;
00244 }
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276 int proper_explodearguments(char *buffer, char **args, int max)
00277 {
00278 int count = 0, iterator = 0, length;
00279 char *start, *finish;
00280
00281 memset(args, 0, sizeof(char *) * max);
00282
00283 start = buffer;
00284 while (count < max - 1 && *start) {
00285 length = strcspn(start, " \t");
00286 args[count++] = strndup(start, length);
00287 start += length;
00288 if(*start != '\x0')
00289 start++;
00290 }
00291 if(*start) {
00292 args[max - 1] = strdup(start);
00293 count++;
00294 }
00295 return count;
00296 }
00297
00298 int mech_parseattributes(char *buffer, char **args, int maxargs)
00299 {
00300 int count = 0;
00301 char *parsed = buffer;
00302 int num_args = 0;
00303
00304 memset(args, 0, sizeof(char *) * maxargs);
00305
00306 while ((count < maxargs) && parsed) {
00307 parsed = strtok(!count ? buffer : NULL, " \t");
00308 args[count] = parsed;
00309 if(parsed)
00310 num_args++;
00311 count++;
00312
00313 }
00314 return num_args;
00315 }