From 2ae8bcb95efb503b5bfe2f8bffde0c02fafcda06 Mon Sep 17 00:00:00 2001 From: Sebastien Date: Sun, 22 Jul 2012 14:58:10 +0200 Subject: [PATCH] sadf: New option -t added. First, this patch renames sadf option '-T' into '-U', and sadf option '-t' into '-T'. It then adds a new option: -t. This option tells sadc to display the timestamps in the local time of the data file creator instead of UTC. The same option already exists for sar. The FAQ is also updated: Tell that options -s and -e are always expressed in local time. --- CHANGES | 16 +++++---- FAQ | 20 +++++------ common.c | 2 +- format.c | 10 +++--- man/sadf.in | 13 +++++--- man/sar.in | 2 +- sa.h | 2 ++ sa_common.c | 11 ++++-- sadf.c | 96 ++++++++++++++++++++++++++++++++++------------------- sadf.h | 6 ++-- 10 files changed, 110 insertions(+), 68 deletions(-) diff --git a/CHANGES b/CHANGES index 7ff7357..4fcab95 100644 --- a/CHANGES +++ b/CHANGES @@ -5,18 +5,22 @@ xxxx/xx/xx: Version 10.1.1 - Sebastien Godard (sysstat orange.fr) * [Peter Schiffer]: Persistent device names support added to sar and iostat (option -j). * [Peter Schiffer]: Make sysstat disk counters consistent - with those from latest kernel (3.5). Warning: This breaks - compatibility with older sar data files format for disk - activity. + with those from latest kernel (3.5). + WARNING: This breaks compatibility with older sar data + files format for disk activity. * [Peter Schiffer]: sar: Use /sys/dev/block/major:minor links to determine devices real name. * Part of 'sadf -H' output was written to stderr instead of stdout. This is now fixed. - * Warning: sadf: Option '-T' has been renamed into '-U', and - optin '-t' has been renamed into '-T'. + * WARNING: sadf: Option '-T' has been renamed into '-U', and + option '-t' has been renamed into '-T'. + * sadf: New option -t added. This option tells sadc to display + the timestamps in the local time of the data file creator + instead of UTC. The same option exists for sar. * [Peter Schiffer]: Various cosmetic changes in manual pages and usage messages displayed by sysstat commands. - * sar and iostat manual pages updated. + * FAQ updated. + * sar, sadf and iostat manual pages updated. 2012/05/16: Version 10.0.5 - Sebastien Godard (sysstat orange.fr) * [Alain Chereau]: Options -g and -T added to iostat. These diff --git a/FAQ b/FAQ index d315eaa..d58cfd3 100644 --- a/FAQ +++ b/FAQ @@ -32,8 +32,8 @@ Also tell me what version your kernel is). 2.7. The "Average:" results from the sar command are just rubbish... 2.8. My database (e.g. MySQL) doesn't appear to understand the time zone displayed by 'sadf -d'... -2.9. I tried to use the -p option of the sadf command, together with the - options -s and -e. Unfortunately, I have nothing displayed at all. +2.9. I tried to use options -s and -e with sadf. Unfortunately, I have + nothing displayed at all. 2.10. I cannot see all my disks when I use the sar -d command... 2.11. Do you know a tool which can graphically plot the data collected by sar? 2.12. When I launch sadc, I get the error message: @@ -309,17 +309,15 @@ to strip the "UTC" characters from the data being loaded into the database. ~~~ -2.9. I tried to use the -p option of the sadf command, together with the -options -s and -e. Unfortunately, I have nothing displayed at all. +2.9. I tried to use options -s and -e with sadf. Unfortunately, I have +nothing displayed at all. This is because no data belong to the specified time interval! -With versions older than 7.0.1, the time specified by options -s or -e -may be considered as given in UTC (Coordinated Universal Time) or local -time depending on whether sadf displays its output in UTC or local time. -Option -p makes sadf display its timestamp in UTC, as indicated in the -manual page. The UTC value may be different from the value that sar -(or sadf without option -p) displays. The same remark applies to the -use of -d option. +The time specified with options -s and -e is now always considered as +being given in local time to be consistent with sar default output. +Remember that timestamps are displayed by sadf in UTC (Coordinated +Universal Time) by default. Use option -T to tell sadf to display them +in local time. ~~~ diff --git a/common.c b/common.c index 97d5907..1016504 100644 --- a/common.c +++ b/common.c @@ -315,7 +315,7 @@ unsigned int get_devmap_major(void) * Print banner. * * IN: - * @rectime Date and time to display. + * @rectime Date to display (don't use time fields). * @sysname System name to display. * @release System release number to display. * @nodename Hostname to display. diff --git a/format.c b/format.c index 15b4dd2..074116a 100644 --- a/format.c +++ b/format.c @@ -1,6 +1,6 @@ /* * format.c: Output format definitions for sadf - * (C) 2011 by Sebastien GODARD (sysstat orange.fr) + * (C) 2011-2012 by Sebastien GODARD (sysstat orange.fr) * *************************************************************************** * This program is free software; you can redistribute it and/or modify it * @@ -46,7 +46,7 @@ struct report_format hdr_fmt = { */ struct report_format db_fmt = { .id = F_DB_OUTPUT, - .options = FO_GROUPED_STATS + FO_TRUE_TIME + FO_HORIZONTALLY + + .options = FO_GROUPED_STATS + FO_LOCAL_TIME + FO_HORIZONTALLY + FO_SEC_EPOCH + FO_FIELD_LIST, .f_header = NULL, .f_statistics = NULL, @@ -60,7 +60,7 @@ struct report_format db_fmt = { */ struct report_format ppc_fmt = { .id = F_PPC_OUTPUT, - .options = FO_GROUPED_STATS + FO_TRUE_TIME + FO_SEC_EPOCH, + .options = FO_GROUPED_STATS + FO_LOCAL_TIME + FO_SEC_EPOCH, .f_header = NULL, .f_statistics = NULL, .f_timestamp = NULL, @@ -73,7 +73,7 @@ struct report_format ppc_fmt = { */ struct report_format xml_fmt = { .id = F_XML_OUTPUT, - .options = FO_HEADER_ONLY + FO_TRUE_TIME, + .options = FO_HEADER_ONLY + FO_LOCAL_TIME, .f_header = print_xml_header, .f_statistics = print_xml_statistics, .f_timestamp = print_xml_timestamp, @@ -86,7 +86,7 @@ struct report_format xml_fmt = { */ struct report_format json_fmt = { .id = F_JSON_OUTPUT, - .options = FO_HEADER_ONLY + FO_TRUE_TIME, + .options = FO_HEADER_ONLY + FO_LOCAL_TIME, .f_header = print_json_header, .f_statistics = print_json_statistics, .f_timestamp = print_json_timestamp, diff --git a/man/sadf.in b/man/sadf.in index 577f0bb..a672220 100644 --- a/man/sadf.in +++ b/man/sadf.in @@ -2,7 +2,7 @@ .SH NAME sadf \- Display data collected by sar in multiple formats. .SH SYNOPSIS -.B sadf [ -C ] [ -d | -j | -p | -x ] [ -H ] [ -h ] [ -T ] [ -U ] [ -V ] [ -P { +.B sadf [ -C ] [ -d | -j | -p | -x ] [ -H ] [ -h ] [ -T | -t | -U ] [ -V ] [ -P { .I cpu .B [,...] | ALL } ] [ -s [ .I hh:mm:ss @@ -83,7 +83,7 @@ most databases, and additional semicolon separated data fields as specified by .I sar_options command line options. -Note that timestamp output can be controlled by options -T and -t. +Note that timestamp output can be controlled by options -T and -U. .IP "-e [ hh:mm:ss ]" Set the ending time of the report, given in local time. The default ending time is 18:00:00. Hours must be given in 24-hour format. @@ -95,7 +95,7 @@ When used in conjunction with option -d, all activities will be displayed horizontally on a single line. .IP -j Print the contents of the data file in JSON (JavaScript Object Notation) -format. Timestamps can be controlled by option -t. +format. Timestamps can be controlled by option -T. .IP "-P { cpu [,...] | ALL }" Tell .B sadf @@ -112,7 +112,7 @@ hostname of the host where the file was created, the interval value (or -1 if not applicable), the timestamp, the device name (or - if not applicable), the field name and its value. -Note that timestamp output can be controlled by options -T and -t. +Note that timestamp output can be controlled by options -T and -U. .IP "-s [ hh:mm:ss ]" Set the starting time of the data (given in local time), causing the .B sadf @@ -121,6 +121,9 @@ specified. The default starting time is 08:00:00. Hours must be given in 24-hour format. .IP -T Display timestamp in local time instead of UTC (Coordinated Universal Time). +.IP -t +Display timestamp in the original local time of the data file creator +instead of UTC (Coordinated Universal Time). .IP -U Display timestamp (UTC - Coordinated Universal Time) in seconds from the epoch. @@ -128,7 +131,7 @@ the epoch. Print version number then exit. .IP -x Print the contents of the data file in XML format. -Timestamps can be controlled by option -t. +Timestamps can be controlled by option -T. The corresponding DTD (Document Type Definition) and XML Schema are included in the sysstat source package. They are also available at diff --git a/man/sar.in b/man/sar.in index 5f9375b..39d6559 100644 --- a/man/sar.in +++ b/man/sar.in @@ -1832,7 +1832,7 @@ used only when data are read from a file (option .IP -t When reading data from a daily data file, indicate that .B sar -should display the timestamps in the original locale time of +should display the timestamps in the original local time of the data file creator. Without this option, the .B sar command displays the timestamps in the user's locale time. diff --git a/sa.h b/sa.h index 72ec784..54e7a4e 100644 --- a/sa.h +++ b/sa.h @@ -87,6 +87,7 @@ #define S_F_HORIZONTALLY 0x00000800 #define S_F_COMMENT 0x00001000 #define S_F_PERSIST_NAME 0x00002000 +#define S_F_LOCAL_TIME 0x00004000 #define WANT_SINCE_BOOT(m) (((m) & S_F_SINCE_BOOT) == S_F_SINCE_BOOT) #define WANT_SA_ROTAT(m) (((m) & S_F_SA_ROTAT) == S_F_SA_ROTAT) @@ -102,6 +103,7 @@ #define DISPLAY_HORIZONTALLY(m) (((m) & S_F_HORIZONTALLY) == S_F_HORIZONTALLY) #define DISPLAY_COMMENT(m) (((m) & S_F_COMMENT) == S_F_COMMENT) #define DISPLAY_PERSIST_NAME_S(m) (((m) & S_F_PERSIST_NAME) == S_F_PERSIST_NAME) +#define PRINT_LOCAL_TIME(m) (((m) & S_F_LOCAL_TIME) == S_F_LOCAL_TIME) #define AO_F_NULL 0x00000000 diff --git a/sa_common.c b/sa_common.c index 67f1215..b077de9 100644 --- a/sa_common.c +++ b/sa_common.c @@ -405,7 +405,8 @@ void get_itv_value(struct record_header *record_hdr_curr, * @file_hdr System activity file standard header. * * OUT: - * @rectime Date and time from file header. + * @rectime Date (and possibly time) from file header. Only the date, + * not the time, should be used by the caller. *************************************************************************** */ void get_file_timestamp_struct(unsigned int flags, struct tm *rectime, @@ -414,7 +415,7 @@ void get_file_timestamp_struct(unsigned int flags, struct tm *rectime, struct tm *loc_t; if (PRINT_TRUE_TIME(flags)) { - /* Get local time. This is just to fill HH:MM:SS fields */ + /* Get local time. This is just to fill fields with a default value. */ get_time(rectime, 0); rectime->tm_mday = file_hdr->sa_day; @@ -1338,6 +1339,12 @@ int parse_sar_opt(char *argv[], int *opt, struct activity *act[], break; case 't': + /* + * Check sar option -t here (as it can be combined + * with other ones, eg. "sar -rtu ..." + * But sadf option -t is check in sadf.c as it won't + * be entered as a sar option after "--". + */ if (caller == C_SAR) { *flags |= S_F_TRUE_TIME; } diff --git a/sadf.c b/sadf.c index 4525ad6..8fd8cd6 100644 --- a/sadf.c +++ b/sadf.c @@ -87,7 +87,7 @@ void usage(char *progname) progname); fprintf(stderr, _("Options are:\n" - "[ -C ] [ -d | -j | -p | -x ] [ -H ] [ -h ] [ -T ] [ -U ] [ -V ]\n" + "[ -C ] [ -d | -j | -p | -x ] [ -H ] [ -h ] [ -T | -t | -U ] [ -V ]\n" "[ -P { [,...] | ALL } ] [ -s [ ] ] [ -e [ ] ]\n" "[ -- ]\n")); exit(1); @@ -166,9 +166,9 @@ void check_format_options(void) /* Remove option -h */ flags &= ~S_F_HORIZONTALLY; } - if (!ACCEPT_TRUE_TIME(fmt[f_position]->options)) { - /* Remove option -T */ - flags &= ~S_F_TRUE_TIME; + if (!ACCEPT_LOCAL_TIME(fmt[f_position]->options)) { + /* Remove options -T and -t */ + flags &= ~(S_F_LOCAL_TIME + S_F_TRUE_TIME); } if (!ACCEPT_SEC_EPOCH(fmt[f_position]->options)) { /* Remove option -U */ @@ -182,19 +182,22 @@ void check_format_options(void) * time, based on current record's "number of seconds since the epoch" saved * in file. * The resulting timestamp is expressed in UTC or in local time, depending - * on whether option -T has been used or not. + * on whether options -T or -t have been used or not. * * IN: * @curr Index in array for current sample statistics. * @rectime Structure where timestamp (expressed in local time or in UTC - * depending on whether option -T has been used or not) can be - * saved for current record. + * depending on whether options -T or -t have been used or not) + * can be saved for current record. * @loctime Structure where timestamp (expressed in local time) can be * saved for current record. * * OUT: - * @rectime Structure where timestamp for current record has been saved. - * @loctime Structure where timestamp for current record has been saved. + * @rectime Structure where timestamp for current record has been saved + * (in local time or in UTC depending on options used). + * @loctime Structure where timestamp for current record has been saved + * (expressed in local time). This field will be used for time + * comparison if options -s and/or -e have been used. *************************************************************************** */ void sadf_get_record_timestamp_struct(int curr, struct tm *rectime, struct tm *loctime) @@ -205,21 +208,28 @@ void sadf_get_record_timestamp_struct(int curr, struct tm *rectime, struct tm *l *loctime = *ltm; } - if (!PRINT_TRUE_TIME(flags)) { - /* Option -T not used: Display timestamp in UTC */ + if (!PRINT_LOCAL_TIME(flags) && !PRINT_TRUE_TIME(flags)) { + /* Options -T and -t not used: Display timestamp in UTC */ ltm = gmtime((const time_t *) &record_hdr[curr].ust_time); } if (ltm) { *rectime = *ltm; } + + if (PRINT_TRUE_TIME(flags)) { + /* Option -t */ + rectime->tm_hour = record_hdr[curr].hour; + rectime->tm_min = record_hdr[curr].minute; + rectime->tm_sec = record_hdr[curr].second; + } } /* *************************************************************************** * Set current record's timestamp strings (date and time). This timestamp is - * expressed in UTC or in local time, depending on whether option -T has - * been used or not. + * expressed in UTC or in local time, depending on whether options -T or -t + * have been used or not. * * IN: * @curr Index in array for current sample statistics. @@ -227,8 +237,8 @@ void sadf_get_record_timestamp_struct(int curr, struct tm *rectime, struct tm *l * @cur_time String where timestamp's time will be saved. * @len Maximum length of timestamp strings. * @rectime Structure with current timestamp (expressed in local time or - * in UTC depending on whether option -T has been used or not) - * that should be broken down in date and time strings. + * in UTC depending on whether options -T or -t have been used + * or not) that should be broken down in date and time strings. * * OUT: * @cur_date Timestamp's date string. @@ -246,8 +256,8 @@ void set_record_timestamp_string(int curr, char *cur_date, char *cur_time, int l } else { /* - * If PRINT_TRUE_TIME(flags) is true (ie. option -T has been used) then - * cur_time is expressed in local time. Else it is expressed in UTC. + * If options -T or -t have been used then cur_time is + * expressed in local time. Else it is expressed in UTC. */ strftime(cur_date, len, "%Y-%m-%d", rectime); strftime(cur_time, len, "%H:%M:%S", rectime); @@ -327,8 +337,8 @@ void xprintf(int nr_tab, const char *fmtf, ...) * @use_tm_end Set to TRUE if option -e has been used. * @tab Number of tabulations to print. * @rectime Structure where timestamp (expressed in local time - * or in UTC depending on whether option -T has been - * used or not) can be saved for current record. + * or in UTC depending on whether options -T/-t have + * been used or not) can be saved for current record. * @loctime Structure where timestamp (expressed in local time) * can be saved for current record. * @@ -356,6 +366,7 @@ void write_textual_restarts(int curr, int use_tm_start, int use_tm_end, int tab, if (*fmt[f_position]->f_restart) { (*fmt[f_position]->f_restart)(&tab, F_MAIN, cur_date, cur_time, + !PRINT_LOCAL_TIME(flags) && !PRINT_TRUE_TIME(flags), &file_hdr); } } @@ -371,8 +382,8 @@ void write_textual_restarts(int curr, int use_tm_start, int use_tm_end, int tab, * @tab Number of tabulations to print. * @ifd Input file descriptor. * @rectime Structure where timestamp (expressed in local time - * or in UTC depending on whether option -T has been - * used or not) can be saved for current record. + * or in UTC depending on whether options -T/-t have + * been used or not) can be saved for current record. * @loctime Structure where timestamp (expressed in local time) * can be saved for current record. * @@ -404,6 +415,7 @@ void write_textual_comments(int curr, int use_tm_start, int use_tm_end, int tab, if (*fmt[f_position]->f_comment) { (*fmt[f_position]->f_comment)(&tab, F_MAIN, cur_date, cur_time, + !PRINT_LOCAL_TIME(flags) && !PRINT_TRUE_TIME(flags), file_comment, &file_hdr); } @@ -490,7 +502,8 @@ void write_mech_stats(int curr, unsigned long dt, unsigned long long itv, strcpy(temp, pre); } snprintf(pre, 80, "%s%s%s", temp, cur_time, - strlen(cur_date) && !PRINT_TRUE_TIME(flags) ? " UTC" : ""); + strlen(cur_date) && !PRINT_LOCAL_TIME(flags) && + !PRINT_TRUE_TIME(flags) ? " UTC" : ""); pre[79] = '\0'; if (DISPLAY_HORIZONTALLY(flags)) { @@ -526,8 +539,8 @@ void write_mech_stats(int curr, unsigned long dt, unsigned long long itv, * @act_id Activities to display. * @cpu_nr Number of processors for current activity data file. * @rectime Structure where timestamp (expressed in local time - * or in UTC depending on whether option -T has been - * used or not) can be saved for current record. + * or in UTC depending on whether options -T/-t have + * been used or not) can be saved for current record. * @loctime Structure where timestamp (expressed in local time) * can be saved for current record. * @@ -621,8 +634,8 @@ int write_parsable_stats(int curr, int reset, long *cnt, int use_tm_start, * @tab Number of tabulations to print. * @cpu_nr Number of processors. * @rectime Structure where timestamp (expressed in local time - * or in UTC depending on whether option -T has been - * used or not) can be saved for current record. + * or in UTC depending on whether options -T/-t have + * been used or not) can be saved for current record. * @loctime Structure where timestamp (expressed in local time) * can be saved for current record. * @@ -701,6 +714,7 @@ int write_textual_stats(int curr, int use_tm_start, int use_tm_end, int reset, if (*fmt[f_position]->f_timestamp) { (*fmt[f_position]->f_timestamp)(&tab, F_BEGIN, cur_date, cur_time, + !PRINT_LOCAL_TIME(flags) && !PRINT_TRUE_TIME(flags), dt); } if (format == F_XML_OUTPUT) { @@ -721,6 +735,7 @@ int write_textual_stats(int curr, int use_tm_start, int use_tm_end, int reset, if (*fmt[f_position]->f_timestamp) { (*fmt[f_position]->f_timestamp)(&tab, F_MAIN, cur_date, cur_time, + !PRINT_LOCAL_TIME(flags) && !PRINT_TRUE_TIME(flags), dt); } } @@ -740,6 +755,7 @@ int write_textual_stats(int curr, int use_tm_start, int use_tm_end, int reset, if (*fmt[f_position]->f_timestamp) { (*fmt[f_position]->f_timestamp)(&tab, F_END, cur_date, cur_time, + !PRINT_LOCAL_TIME(flags) && !PRINT_TRUE_TIME(flags), dt); } @@ -757,8 +773,8 @@ int write_textual_stats(int curr, int use_tm_start, int use_tm_end, int reset, * @rtype Record type (RESTART or COMMENT). * @ifd Input file descriptor. * @rectime Structure where timestamp (expressed in local time - * or in UTC depending on whether option -T has been - * used or not) can be saved for current record. + * or in UTC depending on whether options -T/-t have + * been used or not) can be saved for current record. * @loctime Structure where timestamp (expressed in local time) * can be saved for current record. *************************************************************************** @@ -787,6 +803,7 @@ void sadf_print_special(int curr, int use_tm_start, int use_tm_end, int rtype, i if (*fmt[f_position]->f_restart) { (*fmt[f_position]->f_restart)(NULL, F_MAIN, cur_date, cur_time, + !PRINT_LOCAL_TIME(flags) && !PRINT_TRUE_TIME(flags), &file_hdr); } } @@ -801,6 +818,7 @@ void sadf_print_special(int curr, int use_tm_start, int use_tm_end, int rtype, i if (*fmt[f_position]->f_comment) { (*fmt[f_position]->f_comment)(NULL, F_MAIN, cur_date, cur_time, + !PRINT_LOCAL_TIME(flags) && !PRINT_TRUE_TIME(flags), file_comment, &file_hdr); } @@ -819,8 +837,8 @@ void sadf_print_special(int curr, int use_tm_start, int use_tm_end, int rtype, i * @file_actlst List of (known or unknown) activities in file. * @cpu_nr Number of processors for current activity data file. * @rectime Structure where timestamp (expressed in local time or in UTC - * depending on whether option -T has been used or not) can be - * saved for current record. + * depending on whether options -T/-t have been used or not) can + * be saved for current record. * @loctime Structure where timestamp (expressed in local time) can be * saved for current record. * @@ -911,8 +929,8 @@ void rw_curr_act_stats(int ifd, off_t fpos, int *curr, long *cnt, int *eosaf, * @file_magic System activity file magic header. * @cpu_nr Number of processors for current activity data file. * @rectime Structure where timestamp (expressed in local time or in UTC - * depending on whether option -T has been used or not) can be - * saved for current record. + * depending on whether options -T/-t have been used or not) can + * be saved for current record. * @loctime Structure where timestamp (expressed in local time) can be * saved for current record. *************************************************************************** @@ -1139,8 +1157,8 @@ void textual_display_loop(int ifd, struct file_activity *file_actlst, char *dfil * @file_actlst List of (known or unknown) activities in file. * @cpu_nr Number of processors for current activity data file. * @rectime Structure where timestamp (expressed in local time or in UTC - * depending on whether option -T has been used or not) can be - * saved for current record. + * depending on whether options -T/-t have been used or not) can + * be saved for current record. * @loctime Structure where timestamp (expressed in local time) can be * saved for current record. *************************************************************************** @@ -1472,6 +1490,10 @@ int main(int argc, char **argv) break; case 'T': + flags |= S_F_LOCAL_TIME; + break; + + case 't': flags |= S_F_TRUE_TIME; break; @@ -1565,6 +1587,12 @@ int main(int argc, char **argv) dm_major = get_devmap_major(); } + /* Options -T, -t and -U are mutually exclusive */ + if ((PRINT_LOCAL_TIME(flags) + PRINT_TRUE_TIME(flags) + + PRINT_SEC_EPOCH(flags)) > 1) { + usage(argv[0]); + } + /* * Display all the contents of the daily data file if the count parameter * was not set on the command line. diff --git a/sadf.h b/sadf.h index 9c9f20b..c25a146 100644 --- a/sadf.h +++ b/sadf.h @@ -71,9 +71,9 @@ /* * Indicate that timestamp can be displayed in local time instead of UTC - * if option -T has been used. + * if option -T or -t has been used. */ -#define FO_TRUE_TIME 0x08 +#define FO_LOCAL_TIME 0x08 /* * Indicate that all activities will be displayed horizontally @@ -96,7 +96,7 @@ #define DISPLAY_GROUPED_STATS(m) (((m) & FO_GROUPED_STATS) == FO_GROUPED_STATS) #define ACCEPT_HEADER_ONLY(m) (((m) & FO_HEADER_ONLY) == FO_HEADER_ONLY) #define ACCEPT_BAD_FILE_FORMAT(m) (((m) & FO_BAD_FILE_FORMAT) == FO_BAD_FILE_FORMAT) -#define ACCEPT_TRUE_TIME(m) (((m) & FO_TRUE_TIME) == FO_TRUE_TIME) +#define ACCEPT_LOCAL_TIME(m) (((m) & FO_LOCAL_TIME) == FO_LOCAL_TIME) #define ACCEPT_HORIZONTALLY(m) (((m) & FO_HORIZONTALLY) == FO_HORIZONTALLY) #define ACCEPT_SEC_EPOCH(m) (((m) & FO_SEC_EPOCH) == FO_SEC_EPOCH) #define DISPLAY_FIELD_LIST(m) (((m) & FO_FIELD_LIST) == FO_FIELD_LIST) -- 2.40.0