カレンダ情報取得API(Mp_GetCalendar2)について説明します。
記述形式
int Mp_GetCalendar2 (char *APL_name, |
機能説明
Mp_GetCalendar2関数は、カレンダ情報を取得します。
第何週目の何曜日といった、年ごとに変動する休日および振替休日の情報も取得できます。
Windows版でSYSTEM_CALENDARの情報を取得する場合は、運用パターンの種別まで取得するのか、運用日または休日のカレンダ情報のみを取得するのかを指定できます。【Windows版】
パラメタの説明
APL_name
要求元アプリケーション名(64バイト以内)の格納領域アドレスを指定します。
終わりはNULLを指定してください。“Mp_”および“_CAL_”の文字列で始まる名前は、使用しないでください。
cal_name
カレンダ情報を取得するカレンダ名の格納領域アドレスを指定します。カレンダ名は、24バイト以内で終わりにNULLを指定してください。
mode
【Windows版】
パターン種別を取得するかの情報を指定します(SYSTEM_CALENDARの情報を取得する場合に有効)。
パターン種別を取得しません。
パターン種別を取得します。
【UNIX版】
0を指定します。
cal_dat2
カレンダ参照情報構造体(CALENDAR_RDAT2)のアドレスを指定します。
復帰値
復帰値 | 意 味 | 対 処 |
---|---|---|
0 | 正常終了しました。 | - |
-1 | カレンダが存在しません。 | 存在するカレンダのカレンダ名を指定してください。 |
-10 | カレンダサービス/カレンダデーモンが動作していません。 | カレンダサービス/カレンダデーモンを起動してください。 |
-11 | メモリ不足です。 | 以下の方法などで、使用できるメモリを増やしてください。 |
-16 | ファイル操作に失敗しました(readエラー)。 | ハードディスクの空き容量があるか確認してください。ハードディスクに異常がないか確認してください。 |
-17 | カレンダ名長が不当です。 | カレンダ名を24バイト以内で指定してください。 |
カレンダ参照情報構造体(CALENDAR_RDAT2)の形式
typedef struct CALENDAR_RDAT2_TAG { short year ; // 本年の年4桁 short sub_holiday ; // 振替休日の有無を指定 unsigned char holiday_w[12] ; // 毎年の曜日情報 unsigned long holiday_d[12] ; // 毎年の日付情報 unsigned char holiday_m[12][6] ; // 毎年の週情報(12カ月分×6週分) short cal_dat[4][12][31] ; // 4年分(year-1年から)のカレン //ダ情報 } CALENDAR_RDAT2 ;
year
設定される4年分のカレンダ情報の基準の年(4年分の2年目)が西暦4桁で設定されます。通常は、今年が基準として設定されます。
sub_holiday
振替休日が有効かどうかが設定されます。以下の値が設定されます。
値 | 振替休日の有効/無効 |
---|---|
0 | 無効 |
1 | 有効 |
holiday_w
毎年の曜日情報(12カ月分の配列)です。毎年の休日にする曜日が設定されます。先頭から1ビット目を日曜日、2ビット目を月曜日とし、以降3ビット目から7ビット目まで順に、それぞれ火曜日から土曜日までに対応します。毎年、配列に指定した月のビットをオンにした曜日が休日になります。
holiday_d
毎年の日付情報(12カ月分の配列)です。毎年の休日にする日付が設定されます。先頭から1ビット目を1日、2ビット目を2日とし、以降3ビット目から31ビット目まで順に、それぞれ3日から31日までに対応します。毎年、配列に指定した月のビットをオンにした日付が休日になります。
holiday_m
毎年の週情報(12カ月分×6週分の配列)です。第何週目の何曜日といった、毎年日付が変動する休日が設定されます。1番目の配列を何月(1~12)、2番目の配列を何週目(1~5は第1~第5週目、6は最終週)として対応します。先頭から1ビット目を日曜日、2ビット目を月曜日とし、以降3ビット目から7ビット目まで順に、それぞれ火曜日から土曜日までに対応します。毎年、1番目の配列に指定した月の2番目の配列に指定した週のビットをオンにした曜日が休日になります。
cal_dat
yearの前年から4年分のカレンダ情報が設定されます。設定される情報を以下に示します。
【Windows版】
値 | カレンダ情報 |
---|---|
0 | あり得ない日(2月30日など) |
1 | 休日 |
2 | 運用日(modeで0指定時) |
3 | 標準パターン(modeで1指定時) |
4 | 特異パターン1(modeで1指定時) |
5 | 特異パターン2(modeで1指定時) |
6 | 特異パターン3(modeで1指定時) |
7 | 特異パターン4(modeで1指定時) |
8 | 特異パターン5(modeで1指定時) |
9 | 特異パターン6(modeで1指定時) |
10 | 特異パターン7(modeで1指定時) |
11 | 特異パターン8(modeで1指定時) |
12 | 個別1(modeで1指定時) |
11+n | 個別n(modeで1指定時) |
2xxx | 休日/個別(modeで1指定時) xxxは個別のIDに対応 |
【UNIX版】
値 | カレンダ情報 |
---|---|
0 | あり得ない日(2月30日など) |
1 | 休日とする日 |
2 | 運用日とする日 |
プログラム例
カレンダ情報取得APIのプログラム例を以下に示します。
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #include <f3crhcap.h> extern void put_cal_dat2( CALENDAR_RDAT2*) ; void main() { int ret ; CALENDAR_RDAT2 cal_dat2 ; /*.......... 初期化 ..........*/ memset( &cal_dat2, 0x00, sizeof( CALENDAR_RDAT2) ) ; /* カレンダ情報の取得 */ ret = Mp_GetCalendar2( "Test Pro", "calendar_1", 0, &cal_dat2 ) ; printf( "ret= %d\n", ret ) ; if ( ret == 0 ) put_cal_dat2( &cal_dat2 ) ; exit ( 0 ) ; }