SA-MP Forums

Go Back   SA-MP Forums > SA-MP Scripting and Plugins > Plugin Development

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Old 16/04/2018, 04:07 PM   #1
[HLF]Southclaw
High-roller
 
[HLF]Southclaw's Avatar
 
Join Date: Apr 2009
Location: England
Posts: 4,987
Reputation: 1558
Default ctime plugin updated

pawn-ctime



The original CTime plugin by RyDeR`, with some major stability and quality improvements.

Quote:

This plugin allows you to use the functions of the C++ library called “ctime”
(time.h) in Pawn. All functions, macros and “structures” are included and are
as easy as to use. See more information and examples below.
-RyDeR`

The old version had quite a few bad practices, memory leaks and just general not very nice code. This updated version is fully unit tested, cross-platform development ready with CMake and Docker, packaged as a Pawn Package and documented.

Also the questionably confusing tm<var> macro is gone, just allocate the standard Pawn way: new var[e_tm];

The badly named time() function is gone, you can now name local variables time without errors. Just use the standard gettime() function.

Installation

Simply install to your project:

Code:
sampctl package install Southclaws/pawn-ctime
Include in your code and begin using the library:

Code:

#include <ctime>
Usage

tm Struct

Code:

enum e_tm {
    tm_sec,
    tm_min,
    tm_hour,
    tm_mday,
    tm_mon,
    tm_year,
    tm_wday,
    tm_yday,
    tm_isdst
};
This mirrors the ctime tm struct in Pawn land. Simply allocate an array with this enumerator as the indices:

Code:

new time[e_tm];
Timestamps

Get a current timestamp with the Pawn standard library function gettime():

Code:

new Time:timestamp = Time:gettime();
(notice the tag Time: is used to preseve compatibility with the old version, this will likely be removed in future.)

Timestamp to tm struct

Then pass that timestamp to localtime to extract values into a e_tm:

Code:

new time[e_tm];
localtime(timestamp, time);
You can now access granular attributes such as seconds, days, months, etc:

Code:

printf("second: %d", time[tm_sec]);
printf("day:    %d", time[tm_mday]);
printf("month:  %d", time[tm_mon]);
Formatting Strings With strftime

You can then pass a tm struct to strftime to create custom strings:

Code:

new buf[128];
strftime(buf, sizeof(buf), "%a", tm); // buf: Mon
strftime(buf, sizeof(buf), "%A", tm); // buf: Monday
strftime(buf, sizeof(buf), "%b", tm); // buf: Apr
strftime(buf, sizeof(buf), "%B", tm); // buf: April
As you can see, %a, %A, etc are special specifiers for outputting datetime-specific strings. See a full list in the documentation.

Testing

Run unit tests with:

Windows

Code:
make test-windows
Linux

Code:
make test-linux
__________________
Tools:

Plugins:

Links:

[HLF]Southclaw is offline   Reply With Quote
 

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
FileManager&Ctime Plugin Error elhanan Scripting Help 40 02/07/2017 12:28 PM
CTime plugin not loading. xXxThunderxXx Scripting Help 8 05/02/2016 09:50 PM
CTime Plugin ZenBish Scripting Help 1 05/02/2016 09:48 PM
CTime and Socket plugin ZenBish Scripting Help 4 09/01/2016 07:41 PM
CTime plugin problem PapaSmerf Scripting Help 4 02/06/2013 01:46 PM


All times are GMT. The time now is 06:43 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.