/******************************************************************************
* Copyright (c) 2000-2019 Ericsson Telecom AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
******************************************************************************/
///////////////////////////////////////////////////////////////////////////////
//
//  File:               TCCDateTime_Functions.ttcn
//  Description:        TCC Useful Functions: DateTime Functions
//  Rev:                R36B
//  Prodnr:             CNL 113 472
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//  Module: TCCDateTime_Functions
//
//  Purpose:
//    This module supports date and time handling
//
//  Module Parameters:
//      -
//
//  Module depends on:
//    -
//
///////////////////////////////////////////////////////////////////////////////
module TCCDateTime_Functions {


///////////////////////////////////////////////////////////////////////////////
//  Function: f_time
//
//  Purpose:
//    Current calendar time of the system in seconds
//
//  Parameters:
//    -
//
//  Return Value:
//    integer - time value
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_time() return integer;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_time_ms
//
//  Purpose:
//    Current calendar time of the system in milliseconds
//
//  Parameters:
//    -
//
//  Return Value:
//    integer - time value
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_time_ms() return integer;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_ctime
//
//  Purpose:
//    Convert a time value in seconds to human readable string
//    The time represented as local time
//
//  Parameters:
//    pl_sec - *in* *integer* - time value
//
//  Return Value:
//    charstring - formatted time in string format
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_ctime(integer pl_sec) return charstring;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_ctime_ms
//
//  Purpose:
//    Convert a time value in milliseconds to human readable string
//    The time represented as local time
//
//  Parameters:
//    pl_msec - *in* *integer* - time value
//
//  Return Value:
//    charstring - formatted time in string format
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_ctime_ms(integer pl_msec) return charstring;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_ctime_UTC
//
//  Purpose:
//    Convert a time value in seconds to human readable string
//    The time represented as UTC
//
//  Parameters:
//    pl_sec - *in* *integer* - time value
//
//  Return Value:
//    charstring - formatted time in string format
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_ctime_UTC(integer pl_sec) return charstring;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_ctime_ms_UTC
//
//  Purpose:
//    Convert a time value in milliseconds to human readable string
//    The time represented as UTC
//
//  Parameters:
//    pl_msec - *in* *integer* - time value
//
//  Return Value:
//    charstring - formatted time in string format
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_ctime_ms_UTC(integer pl_msec) return charstring;

//////////////////////////////////////////////////////////////////////////////
// Function: f_getTpscts
//
// Purpose:
// get special timestamp called Tpscts
// where 18020714540200 = 2018 February 07 14:54:02 GMT+00
//
// Parameters:
//   pl_sec  - *in* *integer* - time value in seconds since epoc or -1
//             if -1 is supplied the current time is used
//   pl_tz   - *in* *integer* - time zone offset in minutes, currently not used
//
// Return Value:
// charstring - tpscts
//
// Errors:
// -
//
// Detailed description:
// -
//
///////////////////////////////////////////////////////////////////////////////
external function f_getTpscts(in integer pl_sec:=-1, in integer pl_tz:=0) return charstring;

//////////////////////////////////////////////////////////////////////////////
// Function: f_getOctTpscts
//
// Purpose:
// get special timestamp called TP Service Centre Time Stamp (TP SCTS), 3GPP TS 23.040
// where '81207041452000'O = 2018 February 07 14:54:02 GMT+00
//
// Parameters:
//   pl_sec  - *in* *integer* - time value in seconds since epoc or -1
//             if -1 is supplied the current time is used
//   pl_tz   - *in* *integer* - time zone offset in minutes
//
// Return Value:
// charstring - tpscts
//
// Errors:
// -
//
// Detailed description:
// -
//
///////////////////////////////////////////////////////////////////////////////
external function f_getOctTpscts(in integer pl_sec:=-1, in integer pl_tz:=0) return octetstring;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_getTimeFormatted
//
//  Purpose:
//    Return the current calendar time in a formatted way
//
//  Parameters:
//    pl_sec - *in* *integer* - time value in seconds
//    pl_format - *in* *charstring* - format string
//
//  Return Value:
//    charstring - formatted time in string format
//
//  Errors:
//    -
//
//  Detailed description:
//    *Specifier / Replaced by / Example*
//
//    ----------------------------------------------------------------------------------------------------------
//
//    %a - Abbreviated weekday name * - Thu
//
//    %A - Full weekday name * - Thursday
//
//    %b - Abbreviated month name * - Aug
//
//    %B - Full month name * - August
//
//    %c - Date and time representation * - Thu Aug 23 14:55:02 2001
//
//    %d - Day of the month (01-31) - 23
//
//    %H - Hour in 24h format (00-23) - 14
//
//    %I - Hour in 12h format (01-12) - 02
//
//    %j - Day of the year (001-366) - 235
//
//    %m - Month as a decimal number (01-12) - 08
//
//    %M - Minute (00-59) - 55
//
//    %p - AM or PM designation - PM
//
//    %S - Second (00-61) - 02
//
//    %U - Week number with the first Sunday as the first day of week one (00-53) - 33
//
//    %w - Weekday as a decimal number with Sunday as 0 (0-6) - 4
//
//    %W - Week number with the first Monday as the first day of week one (00-53) - 34
//
//    %x - Date representation * - 08/23/01
//
//    %X - Time representation * - 14:55:02
//
//    %y - Year, last two digits (00-99) - 01
//
//    %Y - Year - 2001
//
//    %Z - Timezone name or abbreviation - CDT
//
//    %% - A % sign - %
//
//    ----------------------------------------------------------------------------------------------------------
//
//    * The specifiers whose description is marked with an asterisk (*) are locale-dependent.
//
///////////////////////////////////////////////////////////////////////////////
external function f_getTimeFormatted(integer pl_sec, charstring pl_format)
return charstring;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_time2sec
//
//  Purpose:
//    function to convert a formated time value to seconds
//    The time represented as local time
//
//  Parameters:
//    pl_year - *in* *integer* - year (e.g. 2007)
//    pl_mon - *in* *integer* - month (e.g. 3)
//    pl_day - *in* *integer* - day (e.g. 7)
//    pl_hour - *in* *integer* - day (e.g. 12)
//    pl_min - *in* *integer* - day (e.g. 50)
//    pl_sec - *in* *integer* - day (e.g. 7)
//
//  Return Value:
//    integer - time in seconds
//
//  Errors:
//    -
//
//  Detailed description:
//    time in seconds since January 1, 1900
//
///////////////////////////////////////////////////////////////////////////////
external function f_time2sec(
  integer pl_year,
  integer pl_mon,
  integer pl_day,
  integer pl_hour,
  integer pl_min,
  integer pl_sec)
return integer;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_time2sec_UTC
//
//  Purpose:
//    function to convert a formated time value to seconds
//    The time represented as UTC
//
//  Parameters:
//    pl_year - *in* *integer* - year (e.g. 2007)
//    pl_mon - *in* *integer* - month (e.g. 3)
//    pl_day - *in* *integer* - day (e.g. 7)
//    pl_hour - *in* *integer* - day (e.g. 12)
//    pl_min - *in* *integer* - day (e.g. 50)
//    pl_sec - *in* *integer* - day (e.g. 7)
//
//  Return Value:
//    integer - time in seconds
//
//  Errors:
//    -
//
//  Detailed description:
//    time in seconds since January 1, 1900
//
///////////////////////////////////////////////////////////////////////////////
external function f_time2sec_UTC(
  integer pl_year,
  integer pl_mon,
  integer pl_day,
  integer pl_hour,
  integer pl_min,
  integer pl_sec)
return integer;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_getCurrentDateWithOffset
//
//  Purpose:
//    Generate a date from the actual date and time plus the parameter
//    in seconds e.g. getSdate(30) will return a charstring containing
//    the date and time of 30 seconds later
//
//  Parameters:
//    pl_sec - *in* *integer* - offset time value
//
//  Return Value:
//    charstring - formatted time in string format
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_getCurrentDateWithOffset(integer pl_sec) return charstring;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_getCurrentGMTDate
//
//  Purpose:
//    Return the current GMT date in format RFC 1123-Date
//    ex :Mon Nov 20 11:22:08 2017
//
//  Parameters:
//    -
//
//  Return Value:
//    charstring - formatted time in string format
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_getCurrentGMTDate() return charstring;

///////////////////////////////////////////////////////////////////////////////
//  Function: f_getCurrentGMTDate_ms
//
//  Purpose:
//    Return the current GMT date in format Www Mmm dd hh:mm:ss.SSS yyyy
//    ex :Mon Nov 20 11:22:08.693 2017
//
//  Parameters:
//    -
//
//  Return Value:
//    charstring - formatted time in string format
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_getCurrentGMTDate_ms() return charstring;

//////////////////////////////////////////////////////////////////////////////
//  Function: f_tic
//
//  Purpose:
//    Return the number of clock ticks used by the application since
//    the program was launched
//
//    OR
//
//    Return the amount of CPU time in microseconds since the last call of f_tic
//
//    OR ...
//
//    Warning! This function depends on used library version. Be careful!
//
//  Parameters:
//    -
//
//  Return Value:
//    integer - tics since program start
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_tic() return integer;

//////////////////////////////////////////////////////////////////////////////
//  Function: f_toc
//
//  Purpose:
//    Elapsed seconds since time t (only when f_tic() returns the number of
//    clock ticks elapsed since the program was launched)
//
//    Warning! This function depends on used library version. Be careful!
//
//  Parameters:
//    t - *in* *integer* - time value
//
//  Return Value:
//    float - elapsed seconds
//
//  Errors:
//    -
//
//  Detailed description:
//    f_tic counts clock tics since program start. f_toc counts seconds
//    since clock() readout in t till current time
//
///////////////////////////////////////////////////////////////////////////////
external function f_toc(integer t) return float;

//////////////////////////////////////////////////////////////////////////////
//  Function: f_timeDiff
//
//  Purpose:
//    Difference between two time
//
//  Parameters:
//    t_start - *in* *integer* - start time
//    t_stop - *in* *integer* - stop time
//
//  Return Value:
//    integer - t_stop-t_start
//
//  Errors:
//    -
//
//  Detailed description:
//    -
//
///////////////////////////////////////////////////////////////////////////////
external function f_timeDiff(integer t_stop, integer t_start) return integer;

}
