|
|
1.1 ! root 1: /* date_str.c */ ! 2: ! 3: /* Synchronet date/time string conversion routines */ ! 4: ! 5: /* $Id: date_str.c,v 1.5 2000/11/14 02:29:08 rswindell Exp $ */ ! 6: ! 7: /**************************************************************************** ! 8: * @format.tab-size 4 (Plain Text/Source Code File Header) * ! 9: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * ! 10: * * ! 11: * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html * ! 12: * * ! 13: * This program is free software; you can redistribute it and/or * ! 14: * modify it under the terms of the GNU General Public License * ! 15: * as published by the Free Software Foundation; either version 2 * ! 16: * of the License, or (at your option) any later version. * ! 17: * See the GNU General Public License for more details: gpl.txt or * ! 18: * http://www.fsf.org/copyleft/gpl.html * ! 19: * * ! 20: * Anonymous FTP access to the most recent released source is available at * ! 21: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * ! 22: * * ! 23: * Anonymous CVS access to the development source and modification history * ! 24: * is available at cvs.synchro.net:/cvsroot/sbbs, example: * ! 25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login * ! 26: * (just hit return, no password is necessary) * ! 27: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src * ! 28: * * ! 29: * For Synchronet coding style and modification guidelines, see * ! 30: * http://www.synchro.net/source.html * ! 31: * * ! 32: * You are encouraged to submit any modifications (preferably in Unix diff * ! 33: * format) via e-mail to [email protected] * ! 34: * * ! 35: * Note: If this box doesn't appear square, then you need to fix your tabs. * ! 36: ****************************************************************************/ ! 37: ! 38: #include "sbbs.h" ! 39: ! 40: /****************************************************************************/ ! 41: /* Converts a date string in format MM/DD/YY into unix time format */ ! 42: /****************************************************************************/ ! 43: time_t DLLCALL dstrtounix(scfg_t* cfg, char *instr) ! 44: { ! 45: char* p; ! 46: char* day; ! 47: char str[16]; ! 48: struct tm tm; ! 49: ! 50: if(!instr[0] || !strncmp(instr,"00/00/00",8)) ! 51: return(0); ! 52: ! 53: if(isdigit(instr[0]) && isdigit(instr[1]) ! 54: && isdigit(instr[3]) && isdigit(instr[4]) ! 55: && isdigit(instr[6]) && isdigit(instr[7])) ! 56: p=instr; /* correctly formatted */ ! 57: else { ! 58: p=instr; /* incorrectly formatted */ ! 59: while(*p && isdigit(*p)) p++; ! 60: if(*p==0) ! 61: return(0); ! 62: p++; ! 63: day=p; ! 64: while(*p && isdigit(*p)) p++; ! 65: if(*p==0) ! 66: return(0); ! 67: p++; ! 68: sprintf(str,"%02u/%02u/%02u" ! 69: ,atoi(instr)%100,atoi(day)%100,atoi(p)%100); ! 70: p=str; ! 71: } ! 72: ! 73: memset(&tm,0,sizeof(tm)); ! 74: tm.tm_year=((p[6]&0xf)*10)+(p[7]&0xf); ! 75: if (tm.tm_year<Y2K_2DIGIT_WINDOW) ! 76: tm.tm_year+=100; ! 77: if(cfg->sys_misc&SM_EURODATE) { ! 78: tm.tm_mon=((p[3]&0xf)*10)+(p[4]&0xf); ! 79: tm.tm_mday=((p[0]&0xf)*10)+(p[1]&0xf); } ! 80: else { ! 81: tm.tm_mon=((p[0]&0xf)*10)+(p[1]&0xf); ! 82: tm.tm_mday=((p[3]&0xf)*10)+(p[4]&0xf); } ! 83: if (tm.tm_mon) ! 84: tm.tm_mon--; /* zero-based month field */ ! 85: return(mktime(&tm)); ! 86: } ! 87: ! 88: /****************************************************************************/ ! 89: /* Converts unix time format (long - time_t) into a char str MM/DD/YY */ ! 90: /****************************************************************************/ ! 91: char* DLLCALL unixtodstr(scfg_t* cfg, time_t unix_time, char *str) ! 92: { ! 93: struct tm* tm; ! 94: ! 95: if(!unix_time) ! 96: strcpy(str,"00/00/00"); ! 97: else { ! 98: tm=gmtime(&unix_time); ! 99: if(tm==NULL) { ! 100: strcpy(str,"00/00/00"); ! 101: return(str); ! 102: } ! 103: if(tm->tm_mon>11) { /* DOS leap year bug */ ! 104: tm->tm_mon=0; ! 105: tm->tm_year++; } ! 106: if(tm->tm_mday>31) ! 107: tm->tm_mday=1; ! 108: if(cfg->sys_misc&SM_EURODATE) ! 109: sprintf(str,"%02u/%02u/%02u",tm->tm_mday,tm->tm_mon+1 ! 110: ,TM_YEAR(tm->tm_year)); ! 111: else ! 112: sprintf(str,"%02u/%02u/%02u",tm->tm_mon+1,tm->tm_mday ! 113: ,TM_YEAR(tm->tm_year)); } ! 114: return(str); ! 115: } ! 116: ! 117: /****************************************************************************/ ! 118: /* Takes the value 'sec' and makes a string the format HH:MM:SS */ ! 119: /****************************************************************************/ ! 120: char* DLLCALL sectostr(uint sec,char *str) ! 121: { ! 122: uchar hour,min,sec2; ! 123: ! 124: hour=(sec/60)/60; ! 125: min=(sec/60)-(hour*60); ! 126: sec2=sec-((min+(hour*60))*60); ! 127: sprintf(str,"%2.2d:%2.2d:%2.2d",hour,min,sec2); ! 128: return(str); ! 129: } ! 130: ! 131:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.