This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
magicka/deps/odoors/ODStat.c
2017-03-19 07:49:46 +10:00

198 lines
5.9 KiB
C

/* OpenDoors Online Software Programming Toolkit
* (C) Copyright 1991 - 1999 by Brian Pirie.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*
* File: ODStat.c
*
* Description: Helper functions used by various built-in personalities.
*
* Revisions: Date Ver Who Change
* ---------------------------------------------------------------
* Oct 13, 1994 6.00 BP New file header format.
* Dec 09, 1994 6.00 BP Standardized coding style.
* Jul 18, 1995 6.00 BP Fix ODStatGetUserAge() bug.
* Nov 13, 1995 6.00 BP 32-bit portability.
* Nov 13, 1995 6.00 BP Created odstat.h.
* Nov 16, 1995 6.00 BP Removed oddoor.h, added odcore.h.
* Jan 12, 1996 6.00 BP Added ODStatStartArrowUse(), etc.
* Feb 19, 1996 6.00 BP Changed version number to 6.00.
* Mar 03, 1996 6.10 BP Begin version 6.10.
* Mar 13, 1996 6.10 BP bOnlyShiftArrow -> nArrowUseCount.
* Mar 19, 1996 6.10 BP MSVC15 source-level compatibility.
* Aug 10, 2003 6.23 SH *nix support
*/
#define BUILDING_OPENDOORS
#include <string.h>
#include <ctype.h>
#include <stddef.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include "OpenDoor.h"
#include "ODCore.h"
#include "ODGen.h"
#include "ODStat.h"
#include "ODKrnl.h"
/* Global working string available to all personalities for status line */
/* generation. */
char szStatusText[80];
/* ----------------------------------------------------------------------------
* ODStatAddKey()
*
* Adds another hot key to the array of custom local keys.
*
* Parameters: wKeyCode - IBM scan-code/ASCII-code style key identification
* code to add.
*
* Return: void
*/
void ODStatAddKey(WORD wKeyCode)
{
if(od_control.od_num_keys < 16)
od_control.od_hot_key[od_control.od_num_keys++] = wKeyCode;
}
/* ----------------------------------------------------------------------------
* ODStatRemoveKey()
*
* Removes a custom sysop hotkey that was previously added with ODStatAddKey().
*
* Parameters: wKeyCode - The scan code / ASCII code key identification code
* to remove.
*
* Return: void
*/
void ODStatRemoveKey(WORD wKeyCode)
{
INT nCount;
for(nCount = 0; nCount < od_control.od_num_keys; ++nCount)
if((WORD)od_control.od_hot_key[nCount] == wKeyCode)
{
if(nCount != od_control.od_num_keys - 1)
{
od_control.od_hot_key[nCount] =
od_control.od_hot_key[od_control.od_num_keys-1];
}
--od_control.od_num_keys;
return;
}
}
/* ----------------------------------------------------------------------------
* ODStatGetUserAge()
*
* Generates a string containing the age, in years, of the current
* user, based on the current date and the user's birthday.
*
* Parameters: pszAge - Pointer to a string where user's age should be stored.
*
* Return: void
*/
void ODStatGetUserAge(char *pszAge)
{
INT nAge;
INT n;
time_t Time;
struct tm *TimeBlock;
if(od_control.od_info_type==RA2EXITINFO || od_control.od_info_type==DOORSYS_WILDCAT)
{
nAge = atoi(od_control.user_birthday) - 1;
if(strlen(od_control.user_birthday) == 8 && nAge <= 11)
{
if(od_control.user_birthday[6] >= '0'
&& od_control.user_birthday[6] <= '9'
&& od_control.user_birthday[7] >= '0'
&& od_control.user_birthday[7] <= '9')
{
if(od_control.user_birthday[3] >= '0'
&& od_control.user_birthday[3] <= '3'
&& od_control.user_birthday[4] >= '0'
&& od_control.user_birthday[4] <= '9')
{
Time = time(NULL);
TimeBlock = localtime(&Time);
n = (TimeBlock->tm_year % 100)
- atoi((char *)od_control.user_birthday + 6);
if(n < 0) nAge = n + 100; else nAge = n;
n = atoi(od_control.user_birthday) - 1;
if(TimeBlock->tm_mon < n)
--nAge;
else if(TimeBlock->tm_mon == n)
{
n=atoi((char *)od_control.user_birthday + 3);
if(TimeBlock->tm_mday < n) --nAge;
}
sprintf(pszAge, "%d", nAge);
return;
}
}
}
}
strcpy(pszAge, "?");
}
/* ----------------------------------------------------------------------------
* ODStatStartArrowUse()
*
* Called by OpenDoors when it needs to use the arrow keys, and so they
* shouldn't be used by the status line.
*
* Parameters: None
*
* Return: void
*/
void ODStatStartArrowUse(void)
{
++nArrowUseCount;
}
/* ----------------------------------------------------------------------------
* ODStatEndArrowUse()
*
* Called by OpenDoors when it no longer needs to use the arrow keys, and so
* they can again be used by the status line.
*
* Parameters: None
*
* Return: void
*/
void ODStatEndArrowUse(void)
{
ASSERT(nArrowUseCount > 0);
--nArrowUseCount;
}