Mercurial > ~darius > hgwebdir.cgi > paradise_client
view warning.c @ 3:5a977ccbc7a9 default tip
Empty changelog
author | darius |
---|---|
date | Sat, 06 Dec 1997 05:41:29 +0000 |
parents | |
children |
line wrap: on
line source
/* $Id: warning.c,v 1.1.1.1 1997/12/06 05:41:31 darius Exp $ */ /* * warning.c */ #include "copyright.h" #include <stdio.h> #include <math.h> #include <signal.h> #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #ifdef hupx #include <time.h> #else /* hpux */ #include <sys/time.h> #endif /* hpux */ #ifdef RS6K struct tm { int tm_sec; /* seconds (0 - 59) */ int tm_min; /* minutes (0 - 59) */ int tm_hour; /* hours (0 - 23) */ int tm_mday; /* day of month (1 - 31) */ int tm_mon; /* month of year (0 - 11) */ int tm_year; /* year - 1900 */ int tm_wday; /* day of week (Sunday = 0) */ int tm_yday; /* day of year (0 - 365) */ int tm_isdst; /* flag: daylight savings time in effect */ long tm_gmtoff; /* offset from GMT in seconds */ char *tm_zone; /* abbreviation of timezone name */ }; #endif #define W_XOFF 5 #ifndef AMIGA #define W_YOFF 5 #else #define W_YOFF 1 #endif char * timeString(t) time_t t; /* returns a string of the form hour:minute:second */ { static char *s = NULL; struct tm *tm; if (!s) s = (char *) malloc(9); if (t > 24 * 60 * 60) { tm = localtime(&t); sprintf(s, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); } else sprintf(s, "%02d:%02d:%02d", (int) (t / (60 * 60)), (int) ((t % (60 * 60)) / 60), (int) (t % 60)); return s; } /* ** The warning in text will be printed in the warning window. ** The message will last WARNTIME/10 seconds unless another message ** comes through and overwrites it. */ void warning(text) char *text; { /* long curtime; */ /* char timebuf[10]; */ /* struct tm *tm; */ char newtext[91]; /* infinite appending fix - jn */ int len; char *d; int dmg; float phasRatio, avgDmg; int thisHit = 0; newtext[0] = '\0'; warntimer = udcounter + WARNTIME; /* set the line to be cleared */ if (warncount > 0) { /* XFIX */ W_ClearArea(warnw, W_XOFF, W_YOFF, W_Textwidth * warncount, W_Textheight); } warncount = strlen(text); W_WriteText(warnw, W_XOFF, W_YOFF, textColor, text, warncount, W_RegularFont); if (strncmp(text, "Phaser", 6) == 0) { if (strncmp(text + 7, "missed", 6) == 0) { phasFired++; if (!logPhaserMissed) return; thisHit = 0; } else if (strncmp(text + 7, "burst", 5) != 0 && strncmp(text + 7, "shot", 4) != 0) return; else { /* a hit! */ phasFired++; phasHits++; thisHit = 1; } if (phaserStats) { if (thisHit) { d = &text[strlen(text)]; while (!isdigit(*d) && d > text) /* find the last number in the string, should be damage */ d--; while (d > text && isdigit(*d)) d--; if (d > text) { dmg = atoi(d); totalDmg += dmg; avgDmg = (float) totalDmg / (float) phasHits; phasRatio = (100 * phasHits) / (float) phasFired; sprintf(newtext, "Av:%5.2f, Hit:%5.2f%%: ", avgDmg, phasRatio); } } else { /* a miss */ sprintf(newtext, "Hit: %d, Miss: %d, Dmg: %d: ", phasHits, phasFired - phasHits, totalDmg); } } else { /* not keeping phaser stats right now */ phasFired--; if (thisHit) phasHits--; newtext[0] = '\0'; } strncat(newtext, text, 80); len = strlen(newtext); newtext[len++] = ' '; strcpy(newtext + len, timeString(time(NULL))); warncount = warncount + 9; dmessage(newtext, 0, 254, 0); } else if (strncmp(text, "Missile away", 12) == 0) { /* missile total kludge. No value until one is shot :( */ me->p_totmissiles = atoi(text + 13); } else if (strcmp(text, "Prepping for warp jump") == 0) { /* keep track of when in warp prep */ me->p_flags |= PFWARPPREP; } else if (strcmp(text, "Warp drive aborted") == 0) { me->p_flags &= ~PFWARPPREP; } }