diff options
author | Jonathan Kew <jfkthame@googlemail.com> | 2006-07-25 12:37:43 +0000 |
---|---|---|
committer | Jonathan Kew <jfkthame@googlemail.com> | 2006-07-25 12:37:43 +0000 |
commit | 10c60368cd42904bd991453f02b684ebe02ef915 (patch) | |
tree | c6fb06ccf22a81c80af08f79df1b436120703de4 /Build/source/libs/icu-xetex/samples/cal | |
parent | 4d8b2aac6036acbb6878236c27e2fb110dad8643 (diff) |
adding ICU library sources used by xetex
git-svn-id: svn://tug.org/texlive/trunk@1915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/icu-xetex/samples/cal')
-rw-r--r-- | Build/source/libs/icu-xetex/samples/cal/.cvsignore | 6 | ||||
-rw-r--r-- | Build/source/libs/icu-xetex/samples/cal/Makefile.in | 76 | ||||
-rw-r--r-- | Build/source/libs/icu-xetex/samples/cal/cal.c | 762 | ||||
-rw-r--r-- | Build/source/libs/icu-xetex/samples/cal/cal.sln | 21 | ||||
-rw-r--r-- | Build/source/libs/icu-xetex/samples/cal/cal.vcproj | 162 | ||||
-rw-r--r-- | Build/source/libs/icu-xetex/samples/cal/readme.txt | 58 | ||||
-rw-r--r-- | Build/source/libs/icu-xetex/samples/cal/uprint.c | 75 | ||||
-rw-r--r-- | Build/source/libs/icu-xetex/samples/cal/uprint.h | 26 |
8 files changed, 1186 insertions, 0 deletions
diff --git a/Build/source/libs/icu-xetex/samples/cal/.cvsignore b/Build/source/libs/icu-xetex/samples/cal/.cvsignore new file mode 100644 index 00000000000..bb2892f76eb --- /dev/null +++ b/Build/source/libs/icu-xetex/samples/cal/.cvsignore @@ -0,0 +1,6 @@ +Debug +Release +Makefile +*.d +*.pdb +icucal diff --git a/Build/source/libs/icu-xetex/samples/cal/Makefile.in b/Build/source/libs/icu-xetex/samples/cal/Makefile.in new file mode 100644 index 00000000000..62380a0cd85 --- /dev/null +++ b/Build/source/libs/icu-xetex/samples/cal/Makefile.in @@ -0,0 +1,76 @@ +## Makefile.in for ICU - samples/cal +## Copyright (c) 1999-2004, International Business Machines Corporation and +## others. All Rights Reserved. + +## Source directory information +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ + +## Install directory information +top_builddir = ../.. + +include $(top_builddir)/icudefs.mk + +## Build directory information +subdir = samples/cal + +## Extra files to remove for 'make clean' +CLEANFILES = *~ $(DEPS) + +## Target information +TARGET = icucal$(EXEEXT) + +LINK = $(LINK.cc) + +CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(top_srcdir)/i18n +LIBS = $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M) + +OBJECTS = uprint.o cal.o + +DEPS = $(OBJECTS:.o=.d) + +## List of phony targets +.PHONY : all all-local install install-local clean clean-local \ +distclean distclean-local dist dist-local check check-local + +## Clear suffix list +.SUFFIXES : + +## List of standard targets +all: all-local +install: install-local +clean: clean-local +distclean : distclean-local +dist: dist-local +check: all check-local + +all-local: $(TARGET) + +install-local: all-local + +dist-local: + +clean-local: + test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES) + $(RMV) $(OBJECTS) $(TARGET) + +distclean-local: clean-local + $(RMV) Makefile + +check-local: + -$(INVOKE) ./$(TARGET) + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(TARGET) : $(OBJECTS) + $(LINK) $(OUTOPT)$@ $^ $(LIBS) + +ifeq (,$(MAKECMDGOALS)) +-include $(DEPS) +else +ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),) +-include $(DEPS) +endif +endif diff --git a/Build/source/libs/icu-xetex/samples/cal/cal.c b/Build/source/libs/icu-xetex/samples/cal/cal.c new file mode 100644 index 00000000000..4b6f838ec85 --- /dev/null +++ b/Build/source/libs/icu-xetex/samples/cal/cal.c @@ -0,0 +1,762 @@ +/* +********************************************************************** +* Copyright (C) 1998-2004, International Business Machines Corporation +* and others. All Rights Reserved. +********************************************************************** +* +* File date.c +* +* Modification History: +* +* Date Name Description +* 06/16/99 stephen Creation. +******************************************************************************* +*/ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#include "unicode/uloc.h" +#include "unicode/udat.h" +#include "unicode/ucal.h" +#include "unicode/ustring.h" +#include "unicode/uclean.h" + +#include "uprint.h" + +#if UCONFIG_NO_FORMATTING + +int main(int argc, char **argv) +{ + printf("%s: Sorry, UCONFIG_NO_FORMATTING was turned on (see uconfig.h). No formatting can be done. \n", argv[0]); + return 0; +} +#else + + +/* Protos */ +static void usage(void); + +static void version(void); + +static void cal(int32_t month, int32_t year, + UBool useLongNames, UErrorCode *status); + +static void get_symbols(const UDateFormat *fmt, + UDateFormatSymbolType type, + UChar *array[], + int32_t arrayLength, + int32_t lowestIndex, + int32_t firstIndex, + UErrorCode *status); + +static void free_symbols(UChar *array[], + int32_t arrayLength); + +static void get_days(const UDateFormat *fmt, + UChar *days [], UBool useLongNames, + int32_t fdow, UErrorCode *status); + +static void free_days(UChar *days[]); + +static void get_months(const UDateFormat *fmt, + UChar *months [], UBool useLongNames, + UErrorCode *status); + +static void free_months(UChar *months[]); + +static void indent(int32_t count, FILE *f); + +static void print_days(UChar *days [], FILE *f, UErrorCode *status); + +static void print_month(UCalendar *c, + UChar *days [], + UBool useLongNames, int32_t fdow, + UErrorCode *status); + +static void print_year(UCalendar *c, + UChar *days [], UChar *months [], + UBool useLongNames, int32_t fdow, + UErrorCode *status); + +/* The version of cal */ +#define CAL_VERSION "1.0" + +/* Number of days in a week */ +#define DAY_COUNT 7 + +/* Number of months in a year (yes, 13) */ +#define MONTH_COUNT 13 + +/* Separation between months in year view */ +#define MARGIN_WIDTH 4 + +/* Size of stack buffers */ +#define BUF_SIZE 64 + +/* Patterm string - "MMM yyyy" */ +static const UChar sShortPat [] = { 0x004D, 0x004D, 0x004D, 0x0020, +0x0079, 0x0079, 0x0079, 0x0079 }; +/* Pattern string - "MMMM yyyy" */ +static const UChar sLongPat [] = { 0x004D, 0x004D, 0x004D, 0x004D, 0x0020, +0x0079, 0x0079, 0x0079, 0x0079 }; + + +int +main(int argc, + char **argv) +{ + int printUsage = 0; + int printVersion = 0; + UBool useLongNames = 0; + int optind = 1; + char *arg; + int32_t month = -1, year = -1; + UErrorCode status = U_ZERO_ERROR; + + + /* parse the options */ + for(optind = 1; optind < argc; ++optind) { + arg = argv[optind]; + + /* version info */ + if(strcmp(arg, "-v") == 0 || strcmp(arg, "--version") == 0) { + printVersion = 1; + } + /* usage info */ + else if(strcmp(arg, "-h") == 0 || strcmp(arg, "--help") == 0) { + printUsage = 1; + } + /* use long day names */ + else if(strcmp(arg, "-l") == 0 || strcmp(arg, "--long") == 0) { + useLongNames = 1; + } + /* POSIX.1 says all arguments after -- are not options */ + else if(strcmp(arg, "--") == 0) { + /* skip the -- */ + ++optind; + break; + } + /* unrecognized option */ + else if(strncmp(arg, "-", strlen("-")) == 0) { + printf("cal: invalid option -- %s\n", arg+1); + printUsage = 1; + } + /* done with options, display cal */ + else { + break; + } + } + + /* Get the month and year to display, if specified */ + if(optind != argc) { + + /* Month and year specified */ + if(argc - optind == 2) { + sscanf(argv[optind], "%d", (int*)&month); + sscanf(argv[optind + 1], "%d", (int*)&year); + + /* Make sure the month value is legal */ + if(month < 0 || month > 12) { + printf("icucal: Bad value for month -- %d\n", (int)month); + + /* Display usage */ + printUsage = 1; + } + + /* Adjust because months are 0-based */ + --month; + } + /* Only year specified */ + else { + sscanf(argv[optind], "%d", (int*)&year); + } + } + + /* print usage info */ + if(printUsage) { + usage(); + return 0; + } + + /* print version info */ + if(printVersion) { + version(); + return 0; + } + + /* print the cal */ + cal(month, year, useLongNames, &status); + + /* ICU cleanup. Deallocate any memory ICU may be holding. */ + u_cleanup(); + + return (U_FAILURE(status) ? 1 : 0); +} + +/* Usage information */ +static void +usage() +{ + puts("Usage: icucal [OPTIONS] [[MONTH] YEAR]"); + puts(""); + puts("Options:"); + puts(" -h, --help Print this message and exit."); + puts(" -v, --version Print the version number of cal and exit."); + puts(" -l, --long Use long names."); + puts(""); + puts("Arguments (optional):"); + puts(" MONTH An integer (1-12) indicating the month to display"); + puts(" YEAR An integer indicating the year to display"); + puts(""); + puts("For an interesting calendar, look at October 1582"); +} + +/* Version information */ +static void +version() +{ + printf("icucal version %s (ICU version %s), created by Stephen F. Booth.\n", + CAL_VERSION, U_ICU_VERSION); + puts(U_COPYRIGHT_STRING); +} + +static void +cal(int32_t month, + int32_t year, + UBool useLongNames, + UErrorCode *status) +{ + UCalendar *c; + UChar *days [DAY_COUNT]; + UChar *months [MONTH_COUNT]; + int32_t fdow; + + if(U_FAILURE(*status)) return; + + /* Create a new calendar */ + c = ucal_open(0, -1, uloc_getDefault(), UCAL_TRADITIONAL, status); + + /* Determine if we are printing a calendar for one month or for a year */ + + /* Print an entire year */ + if(month == -1 && year != -1) { + + /* Set the year */ + ucal_set(c, UCAL_YEAR, year); + + /* Determine the first day of the week */ + fdow = ucal_getAttribute(c, UCAL_FIRST_DAY_OF_WEEK); + + /* Print the calendar for the year */ + print_year(c, days, months, useLongNames, fdow, status); + } + + /* Print only one month */ + else { + + /* Set the month and the year, if specified */ + if(month != -1) + ucal_set(c, UCAL_MONTH, month); + if(year != -1) + ucal_set(c, UCAL_YEAR, year); + + /* Determine the first day of the week */ + fdow = ucal_getAttribute(c, UCAL_FIRST_DAY_OF_WEEK); + + /* Print the calendar for the month */ + print_month(c, days, useLongNames, fdow, status); + } + + /* Clean up */ + ucal_close(c); +} +/* + * Get a set of DateFormat symbols of a given type. + * + * lowestIndex is the index of the first symbol to fetch. + * (e.g. it will be one to fetch day names, since Sunday is + * day 1 *not* day 0.) + * + * firstIndex is the index of the symbol to place first in + * the output array. This is used when fetching day names + * in locales where the week doesn't start on Sunday. + */ +static void get_symbols(const UDateFormat *fmt, + UDateFormatSymbolType type, + UChar *array[], + int32_t arrayLength, + int32_t lowestIndex, + int32_t firstIndex, + UErrorCode *status) +{ + int32_t count, i; + + if (U_FAILURE(*status)) { + return; + } + + count = udat_countSymbols(fmt, type); + + if(count != arrayLength + lowestIndex) { + return; + } + + for(i = 0; i < arrayLength; i++) { + int32_t index = (i + firstIndex) % arrayLength; + int32_t size = 1 + udat_getSymbols(fmt, type, index + lowestIndex, NULL, 0, status); + + array[index] = (UChar *) malloc(sizeof(UChar) * size); + + *status = U_ZERO_ERROR; + udat_getSymbols(fmt, type, index + lowestIndex, array[index], size, status); + } +} + +/* Free the symbols allocated by get_symbols(). */ +static void free_symbols(UChar *array[], + int32_t arrayLength) +{ + int32_t i; + + for(i = 0; i < arrayLength; i++) { + free(array[i]); + } +} + +/* Get the day names for the specified locale, in either long or short +form. Also, reorder the days so that they are in the proper order +for the locale (not all locales begin weeks on Sunday; in France, +weeks start on Monday) */ +static void +get_days(const UDateFormat *fmt, + UChar *days [], + UBool useLongNames, + int32_t fdow, + UErrorCode *status) +{ + UDateFormatSymbolType dayType = (useLongNames ? UDAT_WEEKDAYS : UDAT_SHORT_WEEKDAYS); + + if(U_FAILURE(*status)) + return; + + /* fdow is 1-based */ + --fdow; + + get_symbols(fmt, dayType, days, DAY_COUNT, 1, fdow, status); +} + +static void free_days(UChar *days[]) +{ + free_symbols(days, DAY_COUNT); +} + +/* Get the month names for the specified locale, in either long or +short form. */ +static void +get_months(const UDateFormat *fmt, + UChar *months [], + UBool useLongNames, + UErrorCode *status) +{ + UDateFormatSymbolType monthType = (useLongNames ? UDAT_MONTHS : UDAT_SHORT_MONTHS); + + if(U_FAILURE(*status)) + return; + + get_symbols(fmt, monthType, months, MONTH_COUNT - 1, 0, 0, status); /* some locales have 13 months, no idea why */ +} + +static void free_months(UChar *months[]) +{ + free_symbols(months, MONTH_COUNT - 1); +} + +/* Indent a certain number of spaces */ +static void +indent(int32_t count, + FILE *f) +{ + char c [BUF_SIZE]; + + if(count <= 0) + { + return; + } + + if(count < BUF_SIZE) { + memset(c, (int)' ', count); + fwrite(c, sizeof(char), count, f); + } + else { + int32_t i; + for(i = 0; i < count; ++i) + putc(' ', f); + } +} + +/* Print the days */ +static void +print_days(UChar *days [], + FILE *f, + UErrorCode *status) +{ + int32_t i; + + if(U_FAILURE(*status)) return; + + /* Print the day names */ + for(i = 0; i < DAY_COUNT; ++i) { + uprint(days[i], f, status); + putc(' ', f); + } +} + +/* Print out a calendar for c's current month */ +static void +print_month(UCalendar *c, + UChar *days [], + UBool useLongNames, + int32_t fdow, + UErrorCode *status) +{ + int32_t width, pad, i, day; + int32_t lens [DAY_COUNT]; + int32_t firstday, current; + UNumberFormat *nfmt; + UDateFormat *dfmt; + UChar s [BUF_SIZE]; + const UChar *pat = (useLongNames ? sLongPat : sShortPat); + int32_t len = (useLongNames ? 9 : 8); + + if(U_FAILURE(*status)) return; + + + /* ========== Generate the header containing the month and year */ + + /* Open a formatter with a month and year only pattern */ + dfmt = udat_open(UDAT_IGNORE,UDAT_IGNORE,NULL,NULL,0,pat, len,status); + + /* Format the date */ + udat_format(dfmt, ucal_getMillis(c, status), s, BUF_SIZE, 0, status); + + + /* ========== Get the day names */ + get_days(dfmt, days, useLongNames, fdow, status); + + /* ========== Print the header */ + + /* Calculate widths for justification */ + width = 6; /* 6 spaces, 1 between each day name */ + for(i = 0; i < DAY_COUNT; ++i) { + lens[i] = u_strlen(days[i]); + width += lens[i]; + } + + /* Print the header, centered among the day names */ + pad = width - u_strlen(s); + indent(pad / 2, stdout); + uprint(s, stdout, status); + putc('\n', stdout); + + + /* ========== Print the day names */ + + print_days(days, stdout, status); + putc('\n', stdout); + + + /* ========== Print the calendar */ + + /* Get the first of the month */ + ucal_set(c, UCAL_DATE, 1); + firstday = ucal_get(c, UCAL_DAY_OF_WEEK, status); + + /* The day of the week for the first day of the month is based on + 1-based days of the week, which were also reordered when placed + in the days array. Account for this here by offsetting by the + first day of the week for the locale, which is also 1-based. */ + firstday -= fdow; + + /* Open the formatter */ + nfmt = unum_open(UNUM_DECIMAL, NULL,0,NULL,NULL, status); + + /* Indent the correct number of spaces for the first week */ + current = firstday; + if(current < 0) + { + current += 7; + } + for(i = 0; i < current; ++i) + indent(lens[i] + 1, stdout); + + /* Finally, print out the days */ + day = ucal_get(c, UCAL_DATE, status); + do { + + /* Format the current day string */ + unum_format(nfmt, day, s, BUF_SIZE, 0, status); + + /* Calculate the justification and indent */ + pad = lens[current] - u_strlen(s); + indent(pad, stdout); + + /* Print the day number out, followed by a space */ + uprint(s, stdout, status); + putc(' ', stdout); + + /* Update the current day */ + ++current; + current %= DAY_COUNT; + + /* If we're at day 0 (first day of the week), insert a newline */ + if(current == 0) { + putc('\n', stdout); + } + + /* Go to the next day */ + ucal_add(c, UCAL_DATE, 1, status); + day = ucal_get(c, UCAL_DATE, status); + + } while(day != 1); + + /* Output a trailing newline */ + putc('\n', stdout); + + /* Clean up */ + free_days(days); + unum_close(nfmt); + udat_close(dfmt); +} + +/* Print out a calendar for c's current year */ +static void +print_year(UCalendar *c, + UChar *days [], + UChar *months [], + UBool useLongNames, + int32_t fdow, + UErrorCode *status) +{ + int32_t width, pad, i, j; + int32_t lens [DAY_COUNT]; + UNumberFormat *nfmt; + UDateFormat *dfmt; + UChar s [BUF_SIZE]; + const UChar pat [] = { 0x0079, 0x0079, 0x0079, 0x0079 }; + int32_t len = 4; + UCalendar *left_cal, *right_cal; + int32_t left_day, right_day; + int32_t left_firstday, right_firstday, left_current, right_current; + int32_t left_month, right_month; + + if(U_FAILURE(*status)) return; + + /* Alias */ + left_cal = c; + + /* ========== Generate the header containing the year (only) */ + + /* Open a formatter with a month and year only pattern */ + dfmt = udat_open(UDAT_IGNORE,UDAT_IGNORE,NULL,NULL,0,pat, len, status); + + /* Format the date */ + udat_format(dfmt, ucal_getMillis(left_cal, status), s, BUF_SIZE, 0, status); + + /* ========== Get the month and day names */ + get_days(dfmt, days, useLongNames, fdow, status); + get_months(dfmt, months, useLongNames, status); + + /* ========== Print the header, centered */ + + /* Calculate widths for justification */ + width = 6; /* 6 spaces, 1 between each day name */ + for(i = 0; i < DAY_COUNT; ++i) { + lens[i] = u_strlen(days[i]); + width += lens[i]; + } + + /* width is the width for 1 calendar; we are displaying in 2 cols + with MARGIN_WIDTH spaces between months */ + + /* Print the header, centered among the day names */ + pad = 2 * width + MARGIN_WIDTH - u_strlen(s); + indent(pad / 2, stdout); + uprint(s, stdout, status); + putc('\n', stdout); + putc('\n', stdout); + + /* Generate a copy of the calendar to use */ + right_cal = ucal_open(0, -1, uloc_getDefault(), UCAL_TRADITIONAL, status); + ucal_setMillis(right_cal, ucal_getMillis(left_cal, status), status); + + /* Open the formatter */ + nfmt = unum_open(UNUM_DECIMAL,NULL, 0,NULL,NULL, status); + + /* ========== Calculate and display the months, two at a time */ + for(i = 0; i < MONTH_COUNT - 1; i += 2) { + + /* Print the month names for the two current months */ + pad = width - u_strlen(months[i]); + indent(pad / 2, stdout); + uprint(months[i], stdout, status); + indent(pad / 2 + MARGIN_WIDTH, stdout); + pad = width - u_strlen(months[i + 1]); + indent(pad / 2, stdout); + uprint(months[i + 1], stdout, status); + putc('\n', stdout); + + /* Print the day names, twice */ + print_days(days, stdout, status); + indent(MARGIN_WIDTH, stdout); + print_days(days, stdout, status); + putc('\n', stdout); + + /* Setup the two calendars */ + ucal_set(left_cal, UCAL_MONTH, i); + ucal_set(left_cal, UCAL_DATE, 1); + ucal_set(right_cal, UCAL_MONTH, i + 1); + ucal_set(right_cal, UCAL_DATE, 1); + + left_firstday = ucal_get(left_cal, UCAL_DAY_OF_WEEK, status); + right_firstday = ucal_get(right_cal, UCAL_DAY_OF_WEEK, status); + + /* The day of the week for the first day of the month is based on + 1-based days of the week. However, the days were reordered + when placed in the days array. Account for this here by + offsetting by the first day of the week for the locale, which + is also 1-based. */ + + /* We need to mod by DAY_COUNT since fdow can be > firstday. IE, + if fdow = 2 = Monday (like in France) and the first day of the + month is a 1 = Sunday, we want firstday to be 6, not -1 */ + left_firstday += (DAY_COUNT - fdow); + left_firstday %= DAY_COUNT; + + right_firstday += (DAY_COUNT - fdow); + right_firstday %= DAY_COUNT; + + left_current = left_firstday; + right_current = right_firstday; + + left_day = ucal_get(left_cal, UCAL_DATE, status); + right_day = ucal_get(right_cal, UCAL_DATE, status); + + left_month = ucal_get(left_cal, UCAL_MONTH, status); + right_month = ucal_get(right_cal, UCAL_MONTH, status); + + /* Finally, print out the days */ + while(left_month == i || right_month == i + 1) { + + /* If the left month is finished printing, but the right month + still has days to be printed, indent the width of the days + strings and reset the left calendar's current day to 0 */ + if(left_month != i && right_month == i + 1) { + indent(width + 1, stdout); + left_current = 0; + } + + while(left_month == i) { + + /* If the day is the first, indent the correct number of + spaces for the first week */ + if(left_day == 1) { + for(j = 0; j < left_current; ++j) + indent(lens[j] + 1, stdout); + } + + /* Format the current day string */ + unum_format(nfmt, left_day, s, BUF_SIZE, 0, status); + + /* Calculate the justification and indent */ + pad = lens[left_current] - u_strlen(s); + indent(pad, stdout); + + /* Print the day number out, followed by a space */ + uprint(s, stdout, status); + putc(' ', stdout); + + /* Update the current day */ + ++left_current; + left_current %= DAY_COUNT; + + /* Go to the next day */ + ucal_add(left_cal, UCAL_DATE, 1, status); + left_day = ucal_get(left_cal, UCAL_DATE, status); + + /* Determine the month */ + left_month = ucal_get(left_cal, UCAL_MONTH, status); + + /* If we're at day 0 (first day of the week), break and go to + the next month */ + if(left_current == 0) { + break; + } + }; + + /* If the current day isn't 0, indent to make up for missing + days at the end of the month */ + if(left_current != 0) { + for(j = left_current; j < DAY_COUNT; ++j) + indent(lens[j] + 1, stdout); + } + + /* Indent between the two months */ + indent(MARGIN_WIDTH, stdout); + + while(right_month == i + 1) { + + /* If the day is the first, indent the correct number of + spaces for the first week */ + if(right_day == 1) { + for(j = 0; j < right_current; ++j) + indent(lens[j] + 1, stdout); + } + + /* Format the current day string */ + unum_format(nfmt, right_day, s, BUF_SIZE, 0, status); + + /* Calculate the justification and indent */ + pad = lens[right_current] - u_strlen(s); + indent(pad, stdout); + + /* Print the day number out, followed by a space */ + uprint(s, stdout, status); + putc(' ', stdout); + + /* Update the current day */ + ++right_current; + right_current %= DAY_COUNT; + + /* Go to the next day */ + ucal_add(right_cal, UCAL_DATE, 1, status); + right_day = ucal_get(right_cal, UCAL_DATE, status); + + /* Determine the month */ + right_month = ucal_get(right_cal, UCAL_MONTH, status); + + /* If we're at day 0 (first day of the week), break out */ + if(right_current == 0) { + break; + } + + }; + + /* Output a newline */ + putc('\n', stdout); + } + + /* Output a trailing newline */ + putc('\n', stdout); + } + + /* Clean up */ + free_months(months); + free_days(days); + udat_close(dfmt); + unum_close(nfmt); + ucal_close(right_cal); +} + +#endif diff --git a/Build/source/libs/icu-xetex/samples/cal/cal.sln b/Build/source/libs/icu-xetex/samples/cal/cal.sln new file mode 100644 index 00000000000..fc5dae34841 --- /dev/null +++ b/Build/source/libs/icu-xetex/samples/cal/cal.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 7.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cal", "cal.vcproj", "{F7659D77-09CF-4FE9-ACEE-927287AA9509}" +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + ConfigName.0 = Debug + ConfigName.1 = Release + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug.ActiveCfg = Debug|Win32 + {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug.Build.0 = Debug|Win32 + {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release.ActiveCfg = Release|Win32 + {F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/Build/source/libs/icu-xetex/samples/cal/cal.vcproj b/Build/source/libs/icu-xetex/samples/cal/cal.vcproj new file mode 100644 index 00000000000..369c3358f8c --- /dev/null +++ b/Build/source/libs/icu-xetex/samples/cal/cal.vcproj @@ -0,0 +1,162 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="cal" + SccProjectName="" + SccLocalPath=""> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Release|Win32" + OutputDirectory=".\Release" + IntermediateDirectory=".\Release" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + InlineFunctionExpansion="1" + OptimizeForProcessor="2" + AdditionalIncludeDirectories="..\..\..\include" + PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE" + StringPooling="TRUE" + RuntimeLibrary="2" + EnableFunctionLevelLinking="TRUE" + UsePrecompiledHeader="2" + PrecompiledHeaderFile=".\Release/cal.pch" + AssemblerListingLocation=".\Release/" + ObjectFile=".\Release/" + ProgramDataBaseFileName=".\Release/" + WarningLevel="3" + SuppressStartupBanner="TRUE" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuuc.lib icuin.lib" + OutputFile=".\Release/cal.exe" + LinkIncremental="1" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="../../../lib" + ProgramDatabaseFile=".\Release/cal.pdb" + SubSystem="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Release/cal.tlb"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="NDEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + <Configuration + Name="Debug|Win32" + OutputDirectory=".\Debug" + IntermediateDirectory=".\Debug" + ConfigurationType="1" + UseOfMFC="0" + ATLMinimizesCRunTimeLibraryUsage="FALSE" + CharacterSet="2"> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories="..\..\..\include" + PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE" + BasicRuntimeChecks="3" + RuntimeLibrary="3" + UsePrecompiledHeader="2" + PrecompiledHeaderFile=".\Debug/cal.pch" + AssemblerListingLocation=".\Debug/" + ObjectFile=".\Debug/" + ProgramDataBaseFileName=".\Debug/" + BrowseInformation="1" + WarningLevel="3" + SuppressStartupBanner="TRUE" + DebugInformationFormat="4" + CompileAs="0"/> + <Tool + Name="VCCustomBuildTool"/> + <Tool + Name="VCLinkerTool" + AdditionalDependencies="icuucd.lib icuind.lib" + OutputFile=".\Debug/cal.exe" + LinkIncremental="2" + SuppressStartupBanner="TRUE" + AdditionalLibraryDirectories="../../../lib" + GenerateDebugInformation="TRUE" + ProgramDatabaseFile=".\Debug/cal.pdb" + SubSystem="1"/> + <Tool + Name="VCMIDLTool" + TypeLibraryName=".\Debug/cal.tlb"/> + <Tool + Name="VCPostBuildEventTool"/> + <Tool + Name="VCPreBuildEventTool"/> + <Tool + Name="VCPreLinkEventTool"/> + <Tool + Name="VCResourceCompilerTool" + PreprocessorDefinitions="_DEBUG" + Culture="1033"/> + <Tool + Name="VCWebServiceProxyGeneratorTool"/> + <Tool + Name="VCXMLDataGeneratorTool"/> + <Tool + Name="VCWebDeploymentTool"/> + <Tool + Name="VCManagedWrapperGeneratorTool"/> + <Tool + Name="VCAuxiliaryManagedWrapperGeneratorTool"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"> + <File + RelativePath=".\cal.c"> + </File> + <File + RelativePath=".\uprint.c"> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl"> + <File + RelativePath=".\uprint.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"> + </Filter> + </Files> + <Globals> + </Globals> +</VisualStudioProject> diff --git a/Build/source/libs/icu-xetex/samples/cal/readme.txt b/Build/source/libs/icu-xetex/samples/cal/readme.txt new file mode 100644 index 00000000000..69d08e8880b --- /dev/null +++ b/Build/source/libs/icu-xetex/samples/cal/readme.txt @@ -0,0 +1,58 @@ +Copyright (c) 2002-2005, International Business Machines Corporation and others. All Rights Reserved. +icucal: a sample program which displays the calendar. + +This sample demonstrates + Formatting a calendar + Outputting text in the default codepage to the console + + +Files: + cal.c Main source file + uprint.h codepage output convenience header + uprint.h codepage output convenience implementation + cal.sln Windows MSVC workspace. Double-click this to get started. + cal.vcproj Windows MSVC project file + +To Build icucal on Windows + 1. Install and build ICU + 2. In MSVC, open the workspace file icu\samples\cal\cal.sln + 3. Choose a Debug or Release build. + 4. Build. + +To Run on Windows + 1. Start a command shell window + 2. Add ICU's bin directory to the path, e.g. + set PATH=c:\icu\bin;%PATH% + (Use the path to where ever ICU is on your system.) + 3. cd into the cal directory, e.g. + cd c:\icu\source\samples\cal\debug + 4. Run it + cal + +To Build on Unixes + 1. Build ICU. icucal is built automatically by default unless samples are turned off. + Specify an ICU install directory when running configure, + using the --prefix option. The steps to build ICU will look something + like this: + cd <icu directory>/source + runConfigureICU <platform-name> --prefix <icu install directory> [other options] + gmake all + + 2. Install ICU, + gmake install + + To Run on Unixes + cd <icu directory>/source/samples/cal + + gmake check + -or- + + export LD_LIBRARY_PATH=<icu install directory>/lib:.:$LD_LIBRARY_PATH + cal + + + Note: The name of the LD_LIBRARY_PATH variable is different on some systems. + If in doubt, run the sample using "gmake check", and note the name of + the variable that is used there. LD_LIBRARY_PATH is the correct name + for Linux and Solaris. + diff --git a/Build/source/libs/icu-xetex/samples/cal/uprint.c b/Build/source/libs/icu-xetex/samples/cal/uprint.c new file mode 100644 index 00000000000..2b0c8115103 --- /dev/null +++ b/Build/source/libs/icu-xetex/samples/cal/uprint.c @@ -0,0 +1,75 @@ +/* +********************************************************************** +* Copyright (C) 1998-2001, International Business Machines Corporation +* and others. All Rights Reserved. +********************************************************************** +* +* File date.c +* +* Modification History: +* +* Date Name Description +* 06/14/99 stephen Creation. +******************************************************************************* +*/ + +#include "uprint.h" +#include "unicode/ucnv.h" +#include "unicode/ustring.h" + +#define BUF_SIZE 128 + +/* Print a ustring to the specified FILE* in the default codepage */ +void +uprint(const UChar *s, + FILE *f, + UErrorCode *status) +{ + /* converter */ + UConverter *converter; + char buf [BUF_SIZE]; + int32_t sourceLen; + const UChar *mySource; + const UChar *mySourceEnd; + char *myTarget; + int32_t arraySize; + + if(s == 0) return; + + /* set up the conversion parameters */ + sourceLen = u_strlen(s); + mySource = s; + mySourceEnd = mySource + sourceLen; + myTarget = buf; + arraySize = BUF_SIZE; + + /* open a default converter */ + converter = ucnv_open(0, status); + + /* if we failed, clean up and exit */ + if(U_FAILURE(*status)) goto finish; + + /* perform the conversion */ + do { + /* reset the error code */ + *status = U_ZERO_ERROR; + + /* perform the conversion */ + ucnv_fromUnicode(converter, &myTarget, myTarget + arraySize, + &mySource, mySourceEnd, NULL, + TRUE, status); + + /* Write the converted data to the FILE* */ + fwrite(buf, sizeof(char), myTarget - buf, f); + + /* update the conversion parameters*/ + myTarget = buf; + arraySize = BUF_SIZE; + } + while(*status == U_BUFFER_OVERFLOW_ERROR); + + finish: + + /* close the converter */ + ucnv_close(converter); +} diff --git a/Build/source/libs/icu-xetex/samples/cal/uprint.h b/Build/source/libs/icu-xetex/samples/cal/uprint.h new file mode 100644 index 00000000000..16ffb47c115 --- /dev/null +++ b/Build/source/libs/icu-xetex/samples/cal/uprint.h @@ -0,0 +1,26 @@ +/* +********************************************************************** +* Copyright (C) 1998-2004, International Business Machines Corporation +* and others. All Rights Reserved. +********************************************************************** +* +* File uprint.h +* +* Modification History: +* +* Date Name Description +* 06/14/99 stephen Creation. +******************************************************************************* +*/ + +#ifndef UPRINT_H +#define UPRINT_H 1 + +#include <stdio.h> + +#include "unicode/utypes.h" + +/* Print a ustring to the specified FILE* in the default codepage */ +U_CFUNC void uprint(const UChar *s, FILE *f, UErrorCode *status); + +#endif /* ! UPRINT_H */ |