summaryrefslogtreecommitdiffstats
path: root/libkcal/libical/vzic-1.3/vzic-dump.c
diff options
context:
space:
mode:
Diffstat (limited to 'libkcal/libical/vzic-1.3/vzic-dump.c')
-rw-r--r--libkcal/libical/vzic-1.3/vzic-dump.c409
1 files changed, 0 insertions, 409 deletions
diff --git a/libkcal/libical/vzic-1.3/vzic-dump.c b/libkcal/libical/vzic-1.3/vzic-dump.c
deleted file mode 100644
index 8e76aa80..00000000
--- a/libkcal/libical/vzic-1.3/vzic-dump.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * Vzic - a program to convert Olson timezone database files into VZTIMEZONE
- * files compatible with the iCalendar specification (RFC2445).
- *
- * Copyright (C) 2000-2001 Ximian, Inc.
- * Copyright (C) 2003 Damon Chaplin.
- *
- * Author: Damon Chaplin <damon@gnome.org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/*
- * These functions are for dumping all the parsed Zones and Rules to
- * files, to be compared with the output of vzic-dump.pl to check our parsing
- * code is OK. Some of the functions are also used for producing debugging
- * output.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "vzic.h"
-#include "vzic-dump.h"
-
-
-static void dump_add_rule (char *name,
- GArray *rule_array,
- GPtrArray *name_array);
-static int dump_compare_strings (const void *arg1,
- const void *arg2);
-
-
-void
-dump_zone_data (GArray *zone_data,
- char *filename)
-{
- static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
- FILE *fp;
- ZoneData *zone;
- ZoneLineData *zone_line;
- int i, j;
- gboolean output_month, output_day, output_time;
-
- fp = fopen (filename, "w");
- if (!fp) {
- fprintf (stderr, "Couldn't create file: %s\n", filename);
- exit (1);
- }
-
- for (i = 0; i < zone_data->len; i++) {
- zone = &g_array_index (zone_data, ZoneData, i);
-
- fprintf (fp, "Zone\t%s\t", zone->zone_name);
-
- for (j = 0; j < zone->zone_line_data->len; j++) {
- zone_line = &g_array_index (zone->zone_line_data, ZoneLineData, j);
-
- if (j != 0)
- fprintf (fp, "\t\t\t");
-
- fprintf (fp, "%s\t", dump_time (zone_line->stdoff_seconds, TIME_WALL,
- FALSE));
-
- if (zone_line->rules)
- fprintf (fp, "%s\t", zone_line->rules);
- else if (zone_line->save_seconds != 0)
- fprintf (fp, "%s\t", dump_time (zone_line->save_seconds, TIME_WALL,
- FALSE));
- else
- fprintf (fp, "-\t");
-
- fprintf (fp, "%s\t", zone_line->format ? zone_line->format : "-");
-
- if (zone_line->until_set) {
- fprintf (fp, "%s\t", dump_year (zone_line->until_year));
-
- output_month = output_day = output_time = FALSE;
-
- if (zone_line->until_time_code != TIME_WALL
- || zone_line->until_time_seconds != 0)
- output_month = output_day = output_time = TRUE;
- else if (zone_line->until_day_code != DAY_SIMPLE
- || zone_line->until_day_number != 1)
- output_month = output_day = TRUE;
- else if (zone_line->until_month != 0)
- output_month = TRUE;
-
- if (output_month)
- fprintf (fp, "%s", months[zone_line->until_month]);
-
- fprintf (fp, "\t");
-
- if (output_day)
- fprintf (fp, "%s", dump_day_coded (zone_line->until_day_code,
- zone_line->until_day_number,
- zone_line->until_day_weekday));
-
- fprintf (fp, "\t");
-
- if (output_time)
- fprintf (fp, "%s", dump_time (zone_line->until_time_seconds,
- zone_line->until_time_code, FALSE));
-
- } else {
- fprintf (fp, "\t\t\t");
- }
-
- fprintf (fp, "\n");
- }
- }
-
- fclose (fp);
-}
-
-
-void
-dump_rule_data (GHashTable *rule_data,
- char *filename)
-{
- FILE *fp;
- GPtrArray *name_array;
- GArray *rule_array;
- int i;
- char *name;
-
- fp = fopen (filename, "w");
- if (!fp) {
- fprintf (stderr, "Couldn't create file: %s\n", filename);
- exit (1);
- }
-
- /* We need to sort the rules by their names, so they are in the same order
- as the Perl output. So we place all the names in a temporary GPtrArray,
- sort it, then output them. */
- name_array = g_ptr_array_new ();
- g_hash_table_foreach (rule_data, (GHFunc) dump_add_rule, name_array);
- qsort (name_array->pdata, name_array->len, sizeof (char*),
- dump_compare_strings);
-
- for (i = 0; i < name_array->len; i++) {
- name = g_ptr_array_index (name_array, i);
- rule_array = g_hash_table_lookup (rule_data, name);
- if (!rule_array) {
- fprintf (stderr, "Couldn't access rules: %s\n", name);
- exit (1);
- }
- dump_rule_array (name, rule_array, fp);
- }
-
- g_ptr_array_free (name_array, TRUE);
-
- fclose (fp);
-}
-
-
-static void
-dump_add_rule (char *name,
- GArray *rule_array,
- GPtrArray *name_array)
-{
- g_ptr_array_add (name_array, name);
-}
-
-
-static int
-dump_compare_strings (const void *arg1,
- const void *arg2)
-{
- char **a, **b;
-
- a = (char**) arg1;
- b = (char**) arg2;
-
- return strcmp (*a, *b);
-}
-
-
-void
-dump_rule_array (char *name,
- GArray *rule_array,
- FILE *fp)
-{
- static char *months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-
- RuleData *rule;
- int i;
-
-#if 0
- fprintf (fp, "\n# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S");
-#endif
-
- for (i = 0; i < rule_array->len; i++) {
- rule = &g_array_index (rule_array, RuleData, i);
-
- fprintf (fp, "Rule\t%s\t%s\t", name, dump_year (rule->from_year));
-
- if (rule->to_year == rule->from_year)
- fprintf (fp, "only\t");
- else
- fprintf (fp, "%s\t", dump_year (rule->to_year));
-
- fprintf (fp, "%s\t", rule->type ? rule->type : "-");
-
- fprintf (fp, "%s\t", months[rule->in_month]);
-
- fprintf (fp, "%s\t",
- dump_day_coded (rule->on_day_code, rule->on_day_number,
- rule->on_day_weekday));
-
- fprintf (fp, "%s\t", dump_time (rule->at_time_seconds, rule->at_time_code,
- FALSE));
-
- fprintf (fp, "%s\t", dump_time (rule->save_seconds, TIME_WALL, TRUE));
-
- fprintf (fp, "%s", rule->letter_s ? rule->letter_s : "-");
-
- fprintf (fp, "\n");
- }
-}
-
-
-char*
-dump_time (int seconds,
- TimeCode time_code,
- gboolean use_zero)
-{
- static char buffer[256], *sign;
- int hours, minutes;
- char *code;
-
- if (time_code == TIME_STANDARD)
- code = "s";
- else if (time_code == TIME_UNIVERSAL)
- code = "u";
- else
- code = "";
-
- if (seconds < 0) {
- seconds = -seconds;
- sign = "-";
- } else {
- sign = "";
- }
-
- hours = seconds / 3600;
- minutes = (seconds % 3600) / 60;
- seconds = seconds % 60;
-
- if (use_zero && hours == 0 && minutes == 0 && seconds == 0)
- return "0";
- else if (seconds == 0)
- sprintf (buffer, "%s%i:%02i%s", sign, hours, minutes, code);
- else
- sprintf (buffer, "%s%i:%02i:%02i%s", sign, hours, minutes, seconds, code);
-
- return buffer;
-}
-
-
-char*
-dump_day_coded (DayCode day_code,
- int day_number,
- int day_weekday)
-{
- static char buffer[256];
- static char *weekdays[] = { "Sun", "Mon", "Tue", "Wed",
- "Thu", "Fri", "Sat" };
-
- switch (day_code) {
- case DAY_SIMPLE:
- sprintf (buffer, "%i", day_number);
- break;
- case DAY_WEEKDAY_ON_OR_AFTER:
- sprintf (buffer, "%s>=%i", weekdays[day_weekday], day_number);
- break;
- case DAY_WEEKDAY_ON_OR_BEFORE:
- sprintf (buffer, "%s<=%i", weekdays[day_weekday], day_number);
- break;
- case DAY_LAST_WEEKDAY:
- sprintf (buffer, "last%s", weekdays[day_weekday]);
- break;
- default:
- fprintf (stderr, "Invalid day code: %i\n", day_code);
- exit (1);
- }
-
- return buffer;
-}
-
-
-char*
-dump_year (int year)
-{
- static char buffer[256];
-
- if (year == YEAR_MINIMUM)
- return "min";
- if (year == YEAR_MAXIMUM)
- return "max";
-
- sprintf (buffer, "%i", year);
- return buffer;
-}
-
-
-void
-dump_time_zone_names (GList *names,
- char *output_dir,
- GHashTable *zones_hash)
-{
- char filename[PATHNAME_BUFFER_SIZE], *zone_name, *zone_name_in_hash = NULL;
- char strings_filename[PATHNAME_BUFFER_SIZE];
- FILE *fp, *strings_fp = NULL;
- GList *elem;
- ZoneDescription *zone_desc;
-
- sprintf (filename, "%s/zones.tab", output_dir);
- sprintf (strings_filename, "%s/zones.h", output_dir);
-
- fp = fopen (filename, "w");
- if (!fp) {
- fprintf (stderr, "Couldn't create file: %s\n", filename);
- exit (1);
- }
-
- if (VzicDumpZoneTranslatableStrings) {
- strings_fp = fopen (strings_filename, "w");
- if (!strings_fp) {
- fprintf (stderr, "Couldn't create file: %s\n", strings_filename);
- exit (1);
- }
- }
-
- names = g_list_sort (names, (GCompareFunc) strcmp);
-
- elem = names;
- while (elem) {
- zone_name = (char*) elem->data;
-
- zone_desc = g_hash_table_lookup (zones_hash, zone_name);
-
- /* SPECIAL CASES: These timezones are links from other zones and are
- almost exactly the same - they are basically there so users can find
- them a bit easier. But they don't have entries in the zone.tab file,
- so we use the entry from the timezone linked from. */
- if (!zone_desc) {
- if (!strcmp (zone_name, "America/Indiana/Indianapolis"))
- zone_name_in_hash = "America/Indianapolis";
- else if (!strcmp (zone_name, "America/Kentucky/Louisville"))
- zone_name_in_hash = "America/Louisville";
- else if (!strcmp (zone_name, "Asia/Istanbul"))
- zone_name_in_hash = "Europe/Istanbul";
- else if (!strcmp (zone_name, "Europe/Nicosia"))
- zone_name_in_hash = "Asia/Nicosia";
-
- if (zone_name_in_hash)
- zone_desc = g_hash_table_lookup (zones_hash, zone_name_in_hash);
- }
-
- if (zone_desc) {
- fprintf (fp, "%+04i%02i%02i %+04i%02i%02i %s\n",
- zone_desc->latitude[0], zone_desc->latitude[1],
- zone_desc->latitude[2],
- zone_desc->longitude[0], zone_desc->longitude[1],
- zone_desc->longitude[2],
- zone_name);
- } else {
- g_print ("Zone description not found for: %s\n", zone_name);
- fprintf (fp, "%s\n", zone_name);
- }
-
-
- if (VzicDumpZoneTranslatableStrings) {
-#if 0
- char zone_name_buffer[1024], *src, *dest;
-
- for (src = zone_name, dest = zone_name_buffer; *src; src++, dest++)
- *dest = (*src == '_') ? ' ' : *src;
- *dest = '\0';
-#endif
-
- fprintf (strings_fp, "N_(\"%s\");\n", zone_name);
- }
-
- elem = elem->next;
- }
-
- fclose (fp);
-
- if (VzicDumpZoneTranslatableStrings)
- fclose (strings_fp);
-}
-