日本語 Compaq OpenVMS
日本語ライブラリ 利用者の手引き


前へ 次へ 目次 索引


3.6 その他のルーチン

JLB$DATE_TIME

現在の日付けおよび時間の入手

例)


        12時間制の場合平成元年 2月14日 (火) 午後 5時21分 3秒 
        24時間制の場合平成元年 2月14日 (火) 17時21分 3秒 

<形式>

ret-status = JLB$DATE_TIME ( dst-str [, flg[, out-len]] )

<引数>

dst-str
        JLB usage 出力文字列
        access 出力のみ
        mechanism Descriptor渡し
flg
        JLB usage 時間制の指定
        type Byte
        access 入力のみ
        mechanism Reference渡し
  0 : 12時間制(省略時の値)
  1 : 24時間制
out-len
        JLB usage 出力文字列のバイト長
        type Word
        access 出力のみ
        mechanism Reference渡し

<戻り値>

    ret-status SS$_NORMAL 正常終了
  LIB$_STRTRU 出力結果の切捨てが行われた

JLB$DATE_TIME で使用する元号の名称および日付は,論理名で定義されます。この論理名は,システムのスタートアップ時に, SYS$STARTUP:JSY$DT_STARTUP.COM を実行することによって定義されます (SYS$STARTUP:JSY$STARTUP.COM の中から実行されます)。省略時には次のように定義します。


$       define/system/exec jsy$era_name - 
                                "平成", - 
                                "昭和", - 
                                "大正", - 
                                "明治" 
$       define/system/exec jsy$era_begin_date - 
                                "19890108", - 
                                "19261425", - 
                                "19140730", - 
                                "18680908" 
$       define/system/exec jsy$era_display_form 1 

3番目の論理名,JSY$ERA_DISPLAY_FORMAT は,その元号の初年度を「1年(0)」で表示するか,または「元年(1)」で表示するかを選択します。省略時の設定では「元年」です。

例)


#include <stdio.h>                 
#include <descrip.h> 
#include <ssdef.h> 
#include <libdef.h> 
 
#define BUFLEN 100 
 
main() 
{ 
    struct dsc$descriptor_s     dst_str; 
    char        flg; 
    short int   out_len; 
    int         ret_status; 
    char        buffer[ BUFLEN ]; 
    extern int  jlb$date_time(); 
 
    dst_str.dsc$b_class = DSC$K_CLASS_S; 
    dst_str.dsc$b_dtype = DSC$K_DTYPE_T; 
    dst_str.dsc$w_length = sizeof( buffer ); 
    dst_str.dsc$a_pointer = buffer; 
 
    for ( flg = 0 ; flg < 2 ; ++flg ) { 
        ret_status = jlb$date_time( &dst_str, &flg, &out_len ); 
 
        buffer[ out_len ] = '\0'; 
        printf( "フラグ :%1d\n 時間 :\"%s\"    ステータス :",
            flg, dst_str.dsc$a_pointer ); 
 
        switch ( ret_status ) { 
        case SS$_NORMAL: 
            printf( "SS$_NORMAL" ); 
            break; 
        case LIB$_STRTRU: 
            printf( "LIB$_STRTRU" ); 
            break; 
        } 
        putchar( '\n' ); 
    } 
} 

JLB$DEV_KANJI

漢字端末かどうかのチェック

端末が VT80 に設定されているかどうか,または KANJIGEN の SET /OUTPUT=KANJI により出力が漢字に設定されているかどうかをチェックします。

<形式>

ret-status = JLB$DEV_KANJI ( device-name )

<引数>

device-name
        JLB usage デバイス名
        type 文字列
        access 入力のみ
        mechanism Descriptor渡し

<戻り値>

    ret-status 1 : 漢字端末
  0 : 漢字端末ではない

JLB$DEV_KANJI_IN

漢字入力端末かどうかのチェック

端末が KANJIGEN の SET /INPUT=KANJI により,漢字入力に設定されているかどうかをチェックします。

<形式>

ret-status = JLB$DEV_KANJI_IN ( device-name )

<引数>

device-name
        JLB usage デバイス名
        type 文字列
        access 入力のみ
        mechanism Descriptor渡し

<戻り値>

    ret-status 1 : 漢字入力端末
  0 : 漢字入力端末ではない


第 4 章
基本ライブラリ

基本ライブラリ とは,1 文字単位の変換など,より細かな処理を行うためのルーチン群です。

この章では,基本ライブラリの次の項目について説明します。

基本ライブラリ・ルーチン一覧
日本語文字列操作ルーチン
文字変換ルーチン
文字列変換ルーチン

4.1 基本ライブラリ・ルーチン一覧

日本語文字列操作ルーチン

日本語データを扱うための基本的なルーチン群です。1バイト/2バイトの文字コードを正しく取り扱うために使用します。

JSY$CH_NEXT 次の文字の文字位置の入手
JSY$CH_PREV 前の文字の文字位置の入手
JSY$CH_CURR 現在の文字の文字位置の入手
JSY$POS_NEXT 次の文字の文字位置の入手,
および文字列の終わりのチェック
JSY$POS_PREV 前の文字の文字位置の入手,
および文字列の終わりのチェック
JSY$POS_CURR 現在の文字の文字位置の入手,
および文字列の終わりのチェック
JSY$CH_RCHAR 文字列からの文字の取り出し
JSY$CH_RNEXT 文字列からの文字の取り出し
JSY$CH_WCHAR 文字列への文字の書き込み
JSY$CH_WNEXT 文字列への文字の書き込み
JSY$CH_GCHAR 文字列からの文字の取り出し,
および文字列の終わりのチェック
JSY$CH_GNEXT 文字列からの文字の取り出し,
および文字列の終わりのチェック
JSY$CH_PCHAR 文字列への文字の書き込み,
および文字列の終わりのチェック
JSY$CH_PNEXT 文字列への文字の書き込み,
および文字列の終わりのチェック
JSY$CH_SIZE 文字が占めるバイト数の入手
JSY$CH_NBYTE 文字列が占めるバイト数の入手
JSY$CH_NCHAR 文字列に含まれる文字数の入手
JSY$POSITION 文字列の検索
JSY$STR_EQUAL 英大文字/小文字,全角/半角,
ひらがな/カタカナ変換による文字列の比較
JSY$STR_START 英大文字/小文字,全角/半角,
ひらがな/カタカナ変換による文字列の比較
JSY$STR_SEARCH 英大文字/小文字,全角/半角,
ひらがな/カタカナ変換による文字列の検索
JSY$TRIM 文字列の後の空白の切り捨て
JSY$TRUNC 文字列の切り捨て
JSY$LOCC 文字の検索
JSY$SKPC 文字の飛び越し

文字変換ルーチン

文字単位の各種変換を行うルーチン群です。

JSY$CHG_ROM_HALF ローマ文字全角から半角への変換
JSY$CHG_ROM_FULL ローマ文字半角から全角への変換
JSY$CHG_ROM_SIZE ローマ文字全角/半角の相互変換
JSY$CHG_ROM_LOWER 英文字半角/全角の小文字への変換
JSY$CHG_ROM_UPPER 英文字半角/全角の大文字への変換
JSY$CHG_ROM_CASE 英文字全角/半角の大文字/小文字の相互変換
JSY$CHG_KANA_HIRA 全角カタカナから全角ひらがなへの変換
JSY$CHG_KANA_KATA 全角ひらがなから全角カタカナへの変換
JSY$CHG_KANA_KANA 全角ひらがな/全角カタカナの相互変換
JSY$CHG_KANA_DAKU 全角ひらがな/カタカナの濁点/半濁点処理
JSY$CHG_KANA_HALF 全角ひらがな/カタカナから半角カタカナへの変換
JSY$CHG_KANA_FULL 半角カタカナから全角ひらがな/カタカナへの変換
JSY$CHG_GENERAL パラメータ指定による,英大文字/小文字,全角/半角,ひらがな/カタカナ
JSY$CHG_JIS_KUTEN JIS 区点番号から DEC 漢字コードへの変換
JSY$CHG_KEISEN 数字から罫線文字への変換

文字列変換ルーチン

文字列の各種変換を行うルーチン群です。

JSY$TRA_ROM_HALF ローマ文字全角から半角への変換
JSY$TRA_ROM_FULL ローマ文字半角から全角への変換
JSY$TRA_ROM_SIZE ローマ文字全角/半角の相互変換
JSY$TRA_ROM_LOWER 英文字半角/全角の小文字への変換
JSY$TRA_ROM_UPPER 英文字半角/全角の大文字への変換
JSY$TRA_ROM_CASE 英文字全角/半角の大文字/小文字の相互変換
JSY$TRA_ROM_KANA ローマ字から全角ひらがな/カタカナへの変換
JSY$TRA_KANA_HIRA 全角カタカナから全角ひらがなへの変換
JSY$TRA_KANA_KATA 全角ひらがなから全角カタカナへの変換
JSY$TRA_KANA_KANA 全角ひらがな/全角カタカナの相互変換
JSY$TRA_KANA_DAKU 全角ひらがな/カタカナの濁点/半濁点処理
JSY$TRA_KANA_HALF 全角ひらがな/カタカナから半角カタカナへの変換
JSY$TRA_KANA_FULL 半角カタカナから全角ひらがな/カタカナへの変換
JSY$TRA_SYMBOL 記号変換

4.2 日本語文字列操作ルーチン

日本語文字列操作ルーチンは,日本語データを扱うための基本的なルーチン群です。 1 バイト /2 バイトの文字コードを正しく取り扱うために使用します。

JSY$CH_NEXT

次の文字の文字位置の入手

<形式>

 next-ptr = JSY$CH_NEXT ( char-ptr )

<引数>

char-ptr
        JSY usage 文字の1バイト目を指すポインタ
        mechanism Value渡し

<戻り値>

    next-ptr 1文字次の文字の1バイト目を指すポインタ

例)


#include <stdio.h> 
#include <string.h> 
 
static void     create_display_string(); 
 
main() 
{ 
    char        *char_ptr, 
                *next_ptr; 
    char        string[] = "日本語RTL"; 
    char        disp_str[32]; 
    int         byte_offset = 4; 
    extern char *jsy$ch_next(); 
 
    char_ptr = string + byte_offset; 
 
    printf( "文字列 :\"%s\"\n", string ); 
    create_display_string( char_ptr, disp_str ); 
    printf( "実行前の位置の文字 :%s\n", disp_str ); 
 
    next_ptr = jsy$ch_next( char_ptr ); 
    create_display_string( next_ptr, disp_str ); 
    printf( "実行後の位置の文字 :%s\n", disp_str ); 
} 
 
static void     create_display_string(src, disp) 
char    *src; 
char    *disp; 
{ 
    int nof_byte_char = 1; 
    unsigned char       check; 
 
    check = (unsigned char)(*src); 
    if ( ( 0x0A1 <= check ) && ( check <= 0x0FE ) )     /* 範囲内なら2バイト文字 */
        nof_byte_char = 2; 
 
    strncpy( disp, src, nof_byte_char ); 
    disp[ nof_byte_char ] = '\0'; 
} 

JSY$CH_PREV

前の文字の文字位置の入手

<形式>

 prev-ptr = JSY$CH_PREV ( top-ptr, char-ptr )

<引数>

top-ptr
        JSY usage 文字列の先頭を指すポインタ
        mechanism Value渡し
char-ptr
        JSY usage 文字の1バイト目を指すポインタ
        mechanism Value渡し

<戻り値>

    prev-ptr 1文字前の文字の1バイト目を指すポインタ
  char-ptr ≦ top-ptr の場合は0

JSY$CH_CURR

現在の文字の文字位置の入手

<形式>

 curr-ptr = JSY$CH_CURR ( top-ptr, char-ptr )

<引数>

top-ptr
        JSY usage 文字列の先頭を指すポインタ
        mechanism Value渡し
char-ptr
        JSY usage 文字の1バイト目または2バイト目を指すポインタ
        mechanism Value渡し

<戻り値>

    curr-ptr 文字の1バイト目を指すポインタ
  char-ptr < top-ptr の場合は0

JSY$POS_NEXT

次の文字の文字位置の入手,および文字列の終わりのチェック

<形式>

next-ptr = JSY$POS_NEXT ( char-ptr, end-ptr )

<引数>

char-ptr
        JSY usage 文字の1バイト目を指すポインタ
        mechanism Value渡し
end-ptr
        JSY usage 文字列の終わりを示すポインタ
        mechanism Value渡し

<戻り値>

    next-ptr 1文字次の文字の1バイト目を指すポインタ
  char-ptr ≧ end-ptr の場合は 0

JSY$POS_PREV

前の文字の文字位置の入手,および文字列の終わりのチェック

<形式>

prev-ptr = JSY$POS_PREV ( top-ptr, char-ptr, end-ptr )

<引数>

top-ptr
        JSY usage 文字列の先頭を指すポインタ
        mechanism Value渡し
char-ptr
        JSY usage 文字の1バイト目を指すポインタ
        mechanism Value渡し
end-ptr
        JSY usage 文字列の終わりを示すポインタ
        mechanism Value渡し

<戻り値>

    prev-ptr 1文字前の文字の1バイト目を指すポインタ
  char-ptr ≦ top-ptr または char-ptr > end-ptr の場合は 0

例)


#include <stdio.h> 
#include <string.h> 
 
#define MSB     0x80 
 
static void     create_display_string(); 
 
main() 
{ 
    char        *top_ptr, 
                *char_ptr, 
                *end_ptr, 
                *prev_ptr; 
    char        string[] = "日本語RTL"; 
    char        disp_str[32]; 
    int         byte_offset = 6; 
    extern char *jsy$pos_prev(); 
 
    top_ptr = string; 
    end_ptr = string + strlen( string ); 
    char_ptr = string + byte_offset; 
 
    create_display_string( char_ptr, disp_str ); 
    printf( "文字列 :\"%s\"\n", string ); 
    printf( "実行前の位置の文字 :%s\n", disp_str ); 
 
    prev_ptr = jsy$pos_prev( top_ptr, char_ptr, end_ptr ); 
 
    create_display_string( prev_ptr, disp_str ); 
    printf( "実行後の位置の文字 :%s\n", disp_str ); 
} 
 
static void     create_display_string(src, disp) 
char    *src; 
char    *disp; 
{ 
    int nof_byte_char = 1; 
    unsigned char       check; 
 
    check = (unsigned char)(*src); 
    if ( ( 0x0A1 <= check ) && ( check <= 0x0FE ) )     /* 範囲内なら2バイト文字 */
        nof_byte_char = 2; 
 
    strncpy( disp, src, nof_byte_char ); 
    disp[ nof_byte_char ] = '\0'; 
} 


前へ 次へ 目次 索引