| 前へ | 次へ | 目次 | 索引 | 
現在の日付けおよび時間の入手
例)
        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' ); 
    } 
} 
 | 
漢字端末かどうかのチェック
端末が VT80 に設定されているかどうか,または KANJIGEN の SET /OUTPUT=KANJI により出力が漢字に設定されているかどうかをチェックします。
<形式>
ret-status = JLB$DEV_KANJI ( device-name )
<引数>
| device-name | |
|---|---|
| JLB usage | デバイス名 | 
| type | 文字列 | 
| access | 入力のみ | 
| mechanism | Descriptor渡し | 
<戻り値>
| ret-status | 1 : 漢字端末 | 
| 0 : 漢字端末ではない | 
漢字入力端末かどうかのチェック
端末が KANJIGEN の SET /INPUT=KANJI により,漢字入力に設定されているかどうかをチェックします。
<形式>
ret-status = JLB$DEV_KANJI_IN ( device-name )
<引数>
| device-name | |
|---|---|
| JLB usage | デバイス名 | 
| type | 文字列 | 
| access | 入力のみ | 
| mechanism | Descriptor渡し | 
<戻り値>
| ret-status | 1 : 漢字入力端末 | 
| 0 : 漢字入力端末ではない | 
基本ライブラリ とは,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 バイトの文字コードを正しく取り扱うために使用します。
次の文字の文字位置の入手
<形式>
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'; 
} 
 | 
前の文字の文字位置の入手
<形式>
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 | 
現在の文字の文字位置の入手
<形式>
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 | 
次の文字の文字位置の入手,および文字列の終わりのチェック
<形式>
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 | 
前の文字の文字位置の入手,および文字列の終わりのチェック
<形式>
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'; 
} 
 | 
| 前へ | 次へ | 目次 | 索引 |