1 /*- 2 * SPDX-License-Identifier: BSD-3-Clause 3 * 4 * Copyright (c) 2019-2020 The DragonFly Project. All rights reserved. 5 * 6 * This code is derived from software contributed to The DragonFly Project 7 * by Aaron LI <aly@aaronly.me> 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in 17 * the documentation and/or other materials provided with the 18 * distribution. 19 * 3. Neither the name of The DragonFly Project nor the names of its 20 * contributors may be used to endorse or promote products derived 21 * from this software without specific, prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 24 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 26 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 27 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 28 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 29 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 30 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 31 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 33 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 */ 36 37 #ifndef CHINESE_H_ 38 #define CHINESE_H_ 39 40 #include <stdbool.h> 41 42 struct chinese_date { 43 int cycle; 44 int year; /* year in the $cycle: [1, 60] */ 45 int month; /* [1, 12] */ 46 bool leap; /* whether $month is a leap month */ 47 int day; 48 }; 49 50 struct chinese_jieqi { 51 const char *name; 52 const char *zhname; 53 bool is_major; /* whether a major solar term (Zhōngqì) */ 54 int longitude; /* longitude of Sun */ 55 }; 56 57 enum { C_JIEQI_ALL, C_JIEQI_MAJOR, C_JIEQI_MINOR }; 58 59 struct cal_day; 60 61 int chinese_new_year(int year); 62 63 void chinese_from_fixed(int rd, struct chinese_date *date); 64 int fixed_from_chinese(const struct chinese_date *date); 65 66 int chinese_qingming(int g_year); 67 int chinese_jieqi_onafter(int rd, int type, const struct chinese_jieqi **jieqi); 68 69 int chinese_format_date(char *buf, size_t size, int rd); 70 int chinese_find_days_ymd(int year, int month, int day, struct cal_day **dayp, 71 char **edp); 72 int chinese_find_days_dom(int dom, struct cal_day **dayp, char **edp); 73 void show_chinese_calendar(int rd); 74 75 #endif 76