home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / d / d-linux.zip / dm-dist / utility.c < prev    next >
C/C++ Source or Header  |  1992-11-24  |  4KB  |  208 lines

  1. /* ************************************************************************
  2. *  file: utility.c, Utility module.                       Part of DIKUMUD *
  3. *  Usage: Utility procedures                                              *
  4. *  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
  5. ************************************************************************* */
  6.  
  7. #include <stdio.h>
  8. #include <string.h>
  9. #include <assert.h>
  10.  
  11. #include "structs.h"
  12. #include <time.h>
  13. #include "utils.h"
  14.  
  15. extern struct time_data time_info;
  16.  
  17.  
  18. int MIN(int a, int b)
  19. {
  20.     return a < b ? a:b;
  21. }
  22.  
  23.  
  24. int MAX(int a, int b)
  25. {
  26.     return a > b ? a:b;
  27. }
  28.  
  29. /* creates a random number in interval [from;to] */
  30. int number(int from, int to) 
  31. {
  32.     return((random() % (to - from + 1)) + from);
  33. }
  34.  
  35.  
  36.  
  37. /* simulates dice roll */
  38. int dice(int number, int size) 
  39. {
  40.   int r;
  41.   int sum = 0;
  42.  
  43.     assert(size >= 1);
  44.  
  45.   for (r = 1; r <= number; r++) sum += ((random() % size)+1);
  46.   return(sum);
  47. }
  48.  
  49.  
  50.  
  51. /* Create a duplicate of a string */
  52. /*
  53. char *strdup(char *source)
  54. {
  55.     char *new;
  56.  
  57.     CREATE(new, char, strlen(source)+1);
  58.     return(strcpy(new, source));
  59. }
  60. */   
  61.  
  62.  
  63.  
  64. /* returns: 0 if equal, 1 if arg1 > arg2, -1 if arg1 < arg2  */
  65. /* scan 'till found different or end of both                 */
  66. int str_cmp(char *arg1, char *arg2)
  67. {
  68.     int chk, i;
  69.  
  70.     for (i = 0; *(arg1 + i) || *(arg2 + i); i++)
  71.         if (chk = LOWER(*(arg1 + i)) - LOWER(*(arg2 + i)))
  72.             if (chk < 0)
  73.                 return (-1);
  74.             else 
  75.                 return (1);
  76.     return(0);
  77. }
  78.  
  79.  
  80.  
  81. /* returns: 0 if equal, 1 if arg1 > arg2, -1 if arg1 < arg2  */
  82. /* scan 'till found different, end of both, or n reached     */
  83. int strn_cmp(char *arg1, char *arg2, int n)
  84. {
  85.     int chk, i;
  86.  
  87.     for (i = 0; (*(arg1 + i) || *(arg2 + i)) && (n>0); i++, n--)
  88.         if (chk = LOWER(*(arg1 + i)) - LOWER(*(arg2 + i)))
  89.             if (chk < 0)
  90.                 return (-1);
  91.             else 
  92.                 return (1);
  93.  
  94.     return(0);
  95. }
  96.  
  97.  
  98.  
  99. /* writes a string to the log */
  100. void log(char *str)
  101. {
  102.     long ct;
  103.     char *tmstr;
  104.  
  105.     ct = time(0);
  106.     tmstr = asctime(localtime(&ct));
  107.     *(tmstr + strlen(tmstr) - 1) = '\0';
  108.     fprintf(stderr, "%s :: %s\n", tmstr, str);
  109. }
  110.     
  111.  
  112.  
  113. void sprintbit(long vektor, char *names[], char *result)
  114. {
  115.     long nr;
  116.  
  117.     *result = '\0';
  118.  
  119.     for(nr=0; vektor; vektor>>=1)
  120.     {
  121.         if (IS_SET(1, vektor))
  122.             if (*names[nr] != '\n') {
  123.                 strcat(result,names[nr]);
  124.                 strcat(result," ");
  125.             } else {
  126.                 strcat(result,"UNDEFINED");
  127.                 strcat(result," ");
  128.             }
  129.         if (*names[nr] != '\n')
  130.           nr++;
  131.     }
  132.  
  133.     if (!*result)
  134.         strcat(result, "NOBITS");
  135. }
  136.  
  137.  
  138.  
  139. void sprinttype(int type, char *names[], char *result)
  140. {
  141.     int nr;
  142.  
  143.     for(nr=0;(*names[nr]!='\n');nr++);
  144.     if(type < nr)
  145.         strcpy(result,names[type]);
  146.     else
  147.         strcpy(result,"UNDEFINED");
  148. }
  149.  
  150.  
  151. /* Calculate the REAL time passed over the last t2-t1 centuries (secs) */
  152. struct time_info_data real_time_passed(time_t t2, time_t t1)
  153. {
  154.     long secs;
  155.     struct time_info_data now;
  156.  
  157.     secs = (long) (t2 - t1);
  158.  
  159.   now.hours = (secs/SECS_PER_REAL_HOUR) % 24;  /* 0..23 hours */
  160.   secs -= SECS_PER_REAL_HOUR*now.hours;
  161.  
  162.   now.day = (secs/SECS_PER_REAL_DAY);          /* 0..34 days  */
  163.   secs -= SECS_PER_REAL_DAY*now.day;
  164.  
  165.     now.month = -1;
  166.   now.year  = -1;
  167.  
  168.     return now;
  169. }
  170.  
  171.  
  172.  
  173. /* Calculate the MUD time passed over the last t2-t1 centuries (secs) */
  174. struct time_info_data mud_time_passed(time_t t2, time_t t1)
  175. {
  176.     long secs;
  177.     struct time_info_data now;
  178.  
  179.     secs = (long) (t2 - t1);
  180.  
  181.   now.hours = (secs/SECS_PER_MUD_HOUR) % 24;  /* 0..23 hours */
  182.   secs -= SECS_PER_MUD_HOUR*now.hours;
  183.  
  184.   now.day = (secs/SECS_PER_MUD_DAY) % 35;     /* 0..34 days  */
  185.   secs -= SECS_PER_MUD_DAY*now.day;
  186.  
  187.     now.month = (secs/SECS_PER_MUD_MONTH) % 17; /* 0..16 months */
  188.   secs -= SECS_PER_MUD_MONTH*now.month;
  189.  
  190.   now.year = (secs/SECS_PER_MUD_YEAR);        /* 0..XX? years */
  191.  
  192.     return now;
  193. }
  194.  
  195.  
  196.  
  197. struct time_info_data age(struct char_data *ch)
  198. {
  199.     long secs;
  200.     struct time_info_data player_age;
  201.  
  202.     player_age = mud_time_passed(time(0),ch->player.time.birth);
  203.  
  204.   player_age.year += 17;   /* All players start at 17 */
  205.  
  206.     return player_age;
  207. }
  208.