aboutsummaryrefslogtreecommitdiff
path: root/modules/mod_time/mod_time.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/mod_time/mod_time.c')
-rw-r--r--modules/mod_time/mod_time.c239
1 files changed, 239 insertions, 0 deletions
diff --git a/modules/mod_time/mod_time.c b/modules/mod_time/mod_time.c
new file mode 100644
index 0000000..e87c872
--- /dev/null
+++ b/modules/mod_time/mod_time.c
@@ -0,0 +1,239 @@
+/*
+ * Copyright © 2006-2016 SplinterGU (Fenix/Bennugd)
+ * Copyright © 2002-2006 Fenix Team (Fenix)
+ * Copyright © 1999-2002 José Luis Cebrián Pagüe (Fenix)
+ *
+ * This file is part of Bennu - Game Development
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ *
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ *
+ * 3. This notice may not be removed or altered from any source
+ * distribution.
+ *
+ */
+
+/* --------------------------------------------------------------------------- */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "bgddl.h"
+#include "files.h"
+#include "xstrings.h"
+
+#include <SDL.h>
+
+#include <time.h>
+
+/* --------------------------------------------------------------------------- */
+/* Timer */
+
+static int modtime_get_timer( INSTANCE * my, int * params )
+{
+ return SDL_GetTicks() ;
+}
+
+/* --------------------------------------------------------------------------- */
+/* Hora del día */
+
+static int modtime_time( INSTANCE * my, int * params )
+{
+ return time( 0 ) ;
+}
+
+/* --------------------------------------------------------------------------- */
+/*
+ * FUNCTION : modtime_ftime
+ *
+ * Returns parts of the date
+ *
+ * PARAMS:
+ * no params
+ *
+ * RETURN VALUE:
+ * pointer to a string value...
+ *
+ */
+
+static int modtime_ftime( INSTANCE * my, int * params )
+{
+ char buffer[128] ;
+ char * format ;
+ struct tm * t ;
+ int ret ;
+ time_t tim ;
+ char * base ;
+
+#ifdef _WIN32
+ /* aux buffer to make all changes... */
+ char aux[128] ;
+ unsigned char pos ;
+#endif
+
+ format = base = strdup( string_get( params[0] ) ) ;
+ string_discard( params[0] ) ;
+
+#ifdef _WIN32
+ /* Addapting win32 strftime formats to linux formats */
+ /* HEAVY PATCH... :( */
+ pos = 0 ;
+ while ( *format && pos < 127 )
+ {
+ switch ( *format )
+ {
+ case '%': /* MIGHT NEED CONVERSION... */
+ aux[pos] = *format ;
+ pos++ ;
+ format++ ;
+ switch ( *format )
+ {
+ case 'e':
+ aux[pos++] = '#' ;
+ aux[pos] = 'd' ;
+ break ;
+ case 'l':
+ aux[pos++] = '#' ;
+ aux[pos] = 'I' ;
+ break ;
+ case 'k':
+ aux[pos++] = '#' ;
+ aux[pos] = 'H' ;
+ break ;
+ case 'P':
+ aux[pos] = 'p' ;
+ break ;
+
+ case 'C':
+ aux[pos++] = '%' ;
+ aux[pos++] = *format ;
+ aux[pos++] = '%' ;
+ aux[pos] = 'Y' ;
+ break ;
+
+ case 'u':
+ aux[pos++] = '%' ;
+ aux[pos++] = *format ;
+ aux[pos++] = '%' ;
+ aux[pos] = 'w' ;
+ break ;
+
+ case '%': //MUST BE %%%% TO KEEP 2 IN POSTPROCESS
+ aux[pos++] = '%' ;
+ aux[pos++] = '%' ;
+ aux[pos] = '%' ;
+ break ;
+
+ default:
+ aux[pos] = *format ;
+ break ;
+ }
+ break ;
+
+ default: aux[pos] = *format ;
+ break ;
+ }
+ format++ ;
+ pos++ ;
+ }
+ aux[pos] = 0 ;
+ format = aux ;
+#endif
+
+ tim = ( time_t ) params[1] ;
+ t = localtime( &tim ) ;
+ strftime( buffer, sizeof( buffer ), format, t ) ;
+
+#ifdef _WIN32
+ /* win32 postprocess */
+ aux[0] = '\0' ;
+ format = buffer ;
+ pos = 0 ;
+ while ( *format )
+ {
+ switch ( *format )
+ {
+ case '%':
+ format++ ;
+ switch ( *format )
+ {
+ case 'u':
+ format++ ;
+ if ( *format == '0' ) *format = '7' ;
+ aux[pos] = *format ;
+ break ;
+
+ case 'C':
+ format++ ;
+ aux[pos++] = *format ;
+ format++ ;
+ aux[pos] = *format ;
+ format++ ;
+ format++ ;
+ break ;
+
+ default:
+ aux[pos] = *format ;
+ break ;
+ }
+ break ;
+
+ default:
+ aux[pos] = *format ;
+ break ;
+ }
+ format++ ;
+ pos++;
+ }
+ aux[pos] = '\0' ;
+ strcpy( buffer, aux ) ;
+#endif
+
+ ret = string_new( buffer ) ;
+ string_use( ret ) ;
+
+ free( base ) ;
+
+ return ret ;
+}
+
+/* --------------------------------------------------------------------------- */
+
+void __bgdexport( mod_time, module_initialize )()
+{
+#ifndef TARGET_DINGUX_A320
+ if ( !SDL_WasInit( SDL_INIT_TIMER ) ) SDL_InitSubSystem( SDL_INIT_TIMER );
+#endif
+}
+
+/* --------------------------------------------------------------------------- */
+
+void __bgdexport( mod_time, module_finalize )()
+{
+#ifndef TARGET_DINGUX_A320
+ if ( SDL_WasInit( SDL_INIT_TIMER ) ) SDL_QuitSubSystem( SDL_INIT_TIMER );
+#endif
+}
+
+/* --------------------------------------------------------------------------- */
+/* exports */
+/* --------------------------------------------------------------------------- */
+
+#include "mod_time_exports.h"
+
+/* --------------------------------------------------------------------------- */