/* * $Id: glue.hcode.c,v 1.1 2005/06/13 20:50:49 murrayma Exp $ * * Author: Markus Stenberg <fingon@iki.fi> * * Copyright (c) 1997 Markus Stenberg * Copyright (c) 1998-2002 Thomas Wouters * Copyright (c) 2000-2002 Cord Awtry * All rights reserved * * Created: Mon Oct 20 18:53:30 1997 fingon * Last modified: Sat Jun 6 18:43:51 1998 fingon * */ #include "copyright.h" #include "config.h" #include "db.h" #include "externs.h" #ifdef BT_ENABLED #include "mech.h" #include "macros.h" #include "p.glue.h" #endif void set_attr_internal(dbref player, dbref thing, int attrnum, char *attrtext, int key); int bt_get_attr(char *tbuf, int obj, char *name) { ATTR *a; int ao, af; if (!name) return 0; if (!(a = atr_str(name))) return 0; atr_get_str(tbuf, obj, a->number, &ao, &af); if (*tbuf) return 1; return 0; } char *silly_atr_get(int id, int flag) { int i, j; static char buf[LBUF_SIZE]; atr_get_str(buf, id, flag, &i, &j); return buf; #if 0 /* This would waste memory, so.. :P */ return atr_pget(id, flag, &i, &j); #endif } void silly_atr_set(int id, int flag, char *dat) { atr_add_raw(id, flag, dat); } void bt_set_attr(dbref obj, char *attri, char *value) { int attr; ATTR *atr; atr = atr_str(attri); attr = atr ? atr->number : mkattr(attri); set_attr_internal(GOD, obj, attr, value, SET_QUIET); } void KillText(char **mapt) { int i; for (i = 0; mapt[i]; i++) free(mapt[i]); free(mapt); } void ShowText(char **mapt, dbref player) { int i; for (i = 0; mapt[i]; i++) notify(player, mapt[i]); } int BOUNDED(int min, int val, int max) { if (val < min) return min; if (val > max) return max; return val; } float FBOUNDED(float min, float val, float max) { if(val < min) return min; if(val > max) return max; return val; } int MAX(int v1, int v2) { if (v1 > v2) return v1; return v2; } int MIN(int v1, int v2) { if (v1 < v2) return v1; return v2; } /* * Gets the first parameter from a string * and returns it. */ char *first_parseattribute(char *buffer) { int length; char *start, *first; /* Look for the first parameter */ start = buffer; length = strcspn(start, " \t="); /* If the first parameter is to big set the size */ if (length > SBUF_SIZE) length = SBUF_SIZE; /* Make it and return it */ first = (char *)strndup(start, length); return first; } int proper_parseattributes(char *buffer, char **args, int max) { int count = 0, iterator = 0, length; char *start, *finish; memset(args, 0, sizeof(char *)*max); start = buffer; while(count < (max-1) && *start) { if(*start == '=') { args[count++] = strndup(start, 1); start++; continue; } length = strcspn(start, " \t="); args[count++] = strndup(start, length); start+=length; if(*start != '=' && *start != '\x0') start++; } if(*start) { args[max-1] = strdup(start); count++; } return count; } int silly_parseattributes(char *buffer, char **args, int max) { char bufferi[LBUF_SIZE], foobuff[LBUF_SIZE]; char *a, *b; int count = 0; char *parsed = buffer; int num_args = 0; memset(args, 0, sizeof(char *) * max); b = bufferi; for (a = buffer; *a && a; a++) if (*a == '=') { *(b++) = ' '; *(b++) = '='; *(b++) = ' '; } else *(b++) = *a; *b = 0; /* Got da silly string in bufferi variable */ while ((count < max) && parsed) { if (!count) { /* first time through */ parsed = strtok(bufferi, " \t"); } else { parsed = strtok(NULL, " \t"); } args[count] = parsed; /* Set the args pointer */ if (parsed) num_args++; /* Actual count of arguments */ count++; /* Loop to make sure we don't overrun our */ /* buffer */ } /* Hrm. Now all we gotta do is append -rest- of data to end of _last_ arg */ if (args[max - 1] && args[max - 1][0]) { strcpy(foobuff, args[max - 1]); while ((parsed = strtok(NULL, " \t"))) sprintf(foobuff + strlen(foobuff), " %s", parsed); args[max - 1] = foobuff; } return num_args; } int proper_explodearguments(char *buffer, char **args, int max) { int count = 0, iterator = 0, length; char *start, *finish; memset(args, 0, sizeof(char *)*max); start = buffer; while(count < max-1 && *start) { length = strcspn(start, " \t"); args[count++] = strndup(start, length); start+=length; if(*start != '\x0') start++; } if(*start) { args[max-1] = strdup(start); count++; } return count; } int mech_parseattributes(char *buffer, char **args, int maxargs) { int count = 0; char *parsed = buffer; int num_args = 0; memset(args, 0, sizeof(char *) * maxargs); while ((count < maxargs) && parsed) { parsed = strtok(!count ? buffer : NULL, " \t"); args[count] = parsed; /* Set the args pointer */ if (parsed) num_args++; /* Actual count of arguments */ count++; /* Loop to make sure we don't overrun our */ /* buffer */ } return num_args; }