ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/utils.C
(Generate patch)

Comparing deliantra/server/common/utils.C (file contents):
Revision 1.10 by root, Mon Sep 11 01:16:20 2006 UTC vs.
Revision 1.22 by root, Tue Dec 12 21:39:56 2006 UTC

1
2/*
3 * static char *rcsid_utils_c =
4 * "$Id: utils.C,v 1.10 2006/09/11 01:16:20 root Exp $";
5 */
6
7/* 1/*
8 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
9 3
10 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
11 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
22 16
23 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
25 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 20
27 The authors can be reached via e-mail at crossfire-devel@real-time.com 21 The authors can be reached via e-mail at <crossfire@schmorp.de>
28*/ 22*/
29 23
30/* 24/*
31 * General convenience functions for crossfire. 25 * General convenience functions for crossfire.
32 */ 26 */
103 diff = max - min + 1; 97 diff = max - min + 1;
104 ((diff > 2) ? (base = 20) : (base = 50)); /* d2 and d3 are corner cases */ 98 ((diff > 2) ? (base = 20) : (base = 50)); /* d2 and d3 are corner cases */
105 99
106 if (max < 1 || diff < 1) 100 if (max < 1 || diff < 1)
107 { 101 {
108#ifndef WIN32
109 LOG (llevError, "Calling random_roll with min=%lld max=%lld\n", min, max);
110#else
111 LOG (llevError, "Calling random_roll with min=%I64d max=%I64d\n", min, max); 102 LOG (llevError, "Calling random_roll with min=%" PRId64 " max=%" PRId64 "\n", min, max);
112#endif
113 return (min); /* avoids a float exception */ 103 return (min); /* avoids a float exception */
114 } 104 }
115 105
116 /* Don't know of a portable call to get 64 bit random values. 106 /* Don't know of a portable call to get 64 bit random values.
117 * So make a call to get two 32 bit random numbers, and just to 107 * So make a call to get two 32 bit random numbers, and just to
206} 196}
207 197
208/* decay and destroy persihable items in a map */ 198/* decay and destroy persihable items in a map */
209 199
210void 200void
211decay_objects (mapstruct *m) 201decay_objects (maptile *m)
212{ 202{
213 int x, y, destroy; 203 int x, y, destroy;
214 object *op, *otmp; 204 object *op, *otmp;
215 205
216 if (m->unique) 206 if (m->unique)
264 if (op->material & M_ICE && MAP_TEMP (m) > 32) 254 if (op->material & M_ICE && MAP_TEMP (m) > 32)
265 destroy = 1; 255 destroy = 1;
266 } 256 }
267 /* adjust overall chance below */ 257 /* adjust overall chance below */
268 if (destroy && rndm (0, 1)) 258 if (destroy && rndm (0, 1))
269 { 259 op->destroy ();
270 remove_ob (op);
271 free_object (op);
272 }
273 } 260 }
274} 261}
275 262
276/* convert materialname to materialtype_t */ 263/* convert materialname to materialtype_t */
277 264
531 518
532 strncpy (tmp, input, MAX_BUF - 5); 519 strncpy (tmp, input, MAX_BUF - 5);
533 /*trim all trailing commas, spaces etc. */ 520 /*trim all trailing commas, spaces etc. */
534 for (i = strlen (tmp); !isalnum (tmp[i]) && i >= 0; i--) 521 for (i = strlen (tmp); !isalnum (tmp[i]) && i >= 0; i--)
535 tmp[i] = '\0'; 522 tmp[i] = '\0';
523
536 strcat (tmp, "."); 524 strcat (tmp, ".");
537 525
538 p = strrchr (tmp, ','); 526 p = strrchr (tmp, ',');
539 if (p) 527 if (p)
540 { 528 {
544 strcat (input, " and"); 532 strcat (input, " and");
545 strcat (input, p); 533 strcat (input, p);
546 } 534 }
547 else 535 else
548 strcpy (input, tmp); 536 strcpy (input, tmp);
537
549 return; 538 return;
550} 539}
551 540
552void * 541/////////////////////////////////////////////////////////////////////////////
553zero_initialised::operator new (size_t s, void *p) 542
543#if 0
544refcounted *refcounted::rc_first;
545
546refcounted::refcounted ()
554{ 547{
555 memset (p, 0, s); 548 refcnt = 0;
549 rc_next = rc_first;
550 rc_first = this;
551}
552
553refcounted::~refcounted ()
554{
555 assert (!rc_next);
556 assert (!refcnt);
557}
558#endif
559
560void *alloc (int s) throw (std::bad_alloc)
561{
562 void *p = g_slice_alloc (s);
563
564 if (!p)
565 throw std::bad_alloc ();
566
556 return p; 567 return p;
557} 568}
558 569
559void * 570void assign (char *dst, const char *src, int maxlen)
560zero_initialised::operator new (size_t s)
561{ 571{
562 //return calloc (1, s); 572 if (!src)
563 return g_slice_alloc0 (s); 573 src = "";
564}
565 574
566void * 575 int len = strlen (src);
567 zero_initialised::operator new[] (size_t s)
568{
569 //return calloc (1, s);
570 return g_slice_alloc0 (s);
571}
572 576
573void 577 if (len >= maxlen - 1)
574zero_initialised::operator delete (void *p, size_t s) 578 {
575{ 579 if (maxlen <= 4)
576 //free (p); return; 580 {
577 g_slice_free1 (s, p); 581 memset (dst, '.', maxlen - 1);
582 dst [maxlen - 1] = 0;
583 }
584 else
585 {
586 memcpy (dst, src, maxlen - 4);
587 memcpy (dst + maxlen - 4, "...", 4);
588 }
589 }
590 else
591 memcpy (dst, src, len + 1);
578} 592}
579 593
580void 594
581zero_initialised::operator delete[] (void *p, size_t s)
582{
583 //free (p); return;
584 g_slice_free1 (s, p);
585}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines