SYSLIB : 内部変数管理, メッセージ出力

概要

MATH1下位基本数学処理ライブラリの(そしてまた電脳ライブラリの) 最下位に位置するパッケージで, 内部変数の管理やメッセージの出力をする. システムに依存する定数を管理したり, ファイル操作をおこなったりするルーチンが含まれているが, ソースレベルでの機種依存性はない.

サブルーチンのリスト

                                                                       
  GLpGET(CP,IPARA)            内部変数を参照する.                     
                                                                       
  GLpSET(CP,IPARA)            内部変数を変更する.                     
                                                                       
  GLpSTX(CP,IPARA)            内部変数を変更する                       
                              (実行時オプションによる変更を許す).    
                                                                       
  MSGDMP(CLEV,CSUB,CMSG)      メッセージを出力する.                   
                                                                       
  RTPGET(CPFIX,CP,IPARA,N)    実行時オプションから                     
                              内部変数を取得する.                     
                                                                       
  RTCGET(CPFIX,CP,CPARA,N)    実行時オプションから                     
                              内部変数(文字変数)を取得する.         
                                                                       
  CFSRCH(CPL,NP,CFL,NF,CFN)   パス名の先頭部分と末尾部分の             
                              リストの組合せから,存在するファイル名   
                              を探す.                                 
                                                                       

関数のリスト

                                                                
  LCHREQ(CH1,CH2)   大文字・小文字の区別なく文字列を比較する.  
                                                                
  IUFOPN()          利用可能な入出力装置番号を返す.            
                                                                

サブルーチンの説明

GLpGET/GLpSET(GLpSTX)

  1. 機能
    MATH1で(さらには電脳ライブラリ全体で) 使用する内部変数を参照/変更する. ( GLpSTXは実行時オプションによる変更を許す.) 内部変数はすべて参照可能であるが, システムに依存するような内部変数は変更できない.
  2. 呼び出し方法
    CALL GLpGET(CP,IPARA)
    CALL GLpSET(CP,IPARA)
    CALL GLpSTX(CP,IPARA)
  3. パラメーターの説明
                                          
      CP      (C*8)     内部変数の名前.  
                                          
      IPARA   (I,R,L)   内部変数の値.    
                                          
    

    以下にCPとして指定できる名前のリストを記す.

                                                                            
      'NBITSPW'   (I)   1語のビット長.システム依存(ふつうは32).           
                                                                            
      'NCHRSPW'   (I)   1語の文字長.システム依存(ふつうは4).              
                                                                            
      'INTMAX'    (I)   1語で表現できる最大の整数.                         
                        システム依存(備考参照).                           
                                                                            
      'REALMAX'   (R)   1語で表現できる最大の実数.                         
                        システム依存(備考参照).                           
                                                                            
      'REALMIN'   (R)   1語で表現できる最小の正の実数.                     
                        システム依存(備考参照).                           
                                                                            
      'IIUNIT'    (I)   標準入力装置番号.システム依存 (ふつうは5).        
                                                                            
      'IOUNIT'    (I)   標準出力装置番号.システム依存 (ふつうは6).        
                                                                            
      'MSGUNIT'   (I)   メッセージを出力する出力装置番号                    
                        (初期値は'IOUNIT'と同じ).                         
                                                                            
      'MAXMSG'    (I)   出力する最大メッセージ数 (初期値は20).             
                                                                            
      'MSGLEV'    (I)   出力するメッセージレベル.                          
                        0以下ならすべてのレベルのメッセージを出力する;      
                        1なら警告,エラーメッセージを出力する;              
                        2以上ならエラーメッセージだけ出力する (初期値は0)  
                        .                                                   
                                                                            
      'NLNSIZE'   (I)   一行に出力するメッセージの 最大文字数(初期値は78)  
                        . メッセージを出力する際,                          
                        各行の第一カラムにはブランクを書き出すので,        
                        実際の一行の長さは 'NLNSIZE'+1 である.             
                                                                            
      'LMISS'     (L)   欠損値処理をおこなうか どうかを指定する.           
                        .TRUE.ならおこなう,.FALSE.ならおこなわない         
                        (初期値は.FALSE.).                                 
                                                                            
      'IMISS'     (I)   欠損値処理をおこなうときの整数型の欠損値を指定する  
                        (初期値は999).                                     
                                                                            
      'RMISS'     (R)   欠損値処理をおこなうときの実数型の欠損値を指定する  
                        (初期値は999.0).                                   
                                                                            
      'IUNDEF'    (I)   不定であることを示す整数型の値 (初期値は-999).     
                                                                            
      'RUNDEF'    (I)   不定であることを示す実数型の値 (初期値は-999.0).   
                                                                            
      'LEPSL'     (L)   実数値を比較するとき,                              
                        誤差を含めた判断をするかどうかを指定する (第       
                        [here] ,[here] ,[here] ,[here]                      
                        章参照). .TRUE.なら誤差を含めた判断をする;         
                        .FALSE.なら誤差を含めた判断をしない                 
                        (初期値は.FALSE.).                                 
                                                                            
      'REPSL'     (R)   誤差を含めた判断をするときの相対誤差の基準値.      
                        システム依存(備考参照).                           
                                                                            
      'RFACT'     (R)   誤差を含めた判断をするとき,                        
                        相対誤差の基準値にかけるスケーリングファクター      
                        (初期値は1.0)                                      
                        . 'REPSL' 'RFACT'が相対誤差として用いられる.       
                                                                            
    
  4. 備考
    1. 内部変数を管理するための下請けルーチンとして 以下のものがある.
                                                                          
        GLPQNP(NCP)         内部変数の総数NCPを求める.                   
                                                                          
        GLPQID(CP,IDX)      内部変数CPの位置IDXを求める.                 
                                                                          
        GLPQCP(IDX,CP)      IDXの位置にある内部変数の名前CPを参照する.   
                                                                          
        GLPQVL(IDX,IPARA)   IDXの位置にある内部変数の値IPARAを参照する.  
                                                                          
        GLPSVL(IDX,IPARA)   IDXの位置にある内部変数の値IPARAを変更する.  
                                                                          
      
    2. GLpGETは上に述べたGLPQIDを呼んで 内部変数の位置を求め,GLPQVLによって値を参照する; GLpSETGLPQIDを呼んで内部変数の位置を求め, GLPSVLによって値を設定する. したがって指定した内部変数名が見つからないとき, エラーメッセージはGLPQIDが出力する.
    3. IPARAとしては適切な型の定数または変数を指定すること.
    4. 内部変数の名前は,大文字・小文字の区別なく文字列を比較する 文字関数LCHREQを用いてチェックされるので, LCHREQが正しく移植されていれば, 小文字で指定してもよい.
    5. 'REALMIN'があらわす最小の正の実数は, 仮数部の最上位の桁が0でないものとする. これは必ずしも UNDER FLOW を起こす直前の値ではないので 注意すること. すなわち,通常実数型の変数は仮数部の最上位の桁が 0でないように規格化されるが, システムによってはこのような規格化をすると 指数部が足りなくなるような小さな値でも, 仮数部の上位の桁を0にすることで表現するものがある. このような値は一応実数として扱われるが, 通常の実数の精度はない. つまり'REALMIN'は通常の精度を持つ 最小の正の実数である.
    6. 'REPSL'があらわす相対誤差の基準値は, 実数表現の相対誤差の最大値の10倍とする. この10倍という値には任意性があるが計算結果の精度の目安 として安全率を10倍としたものである. 実数表現の相対誤差は内部表現の形から 論理的にもとめることができるが, 実際に実数の仮数部の最下位 bit を on/off することでも求めることができる. 1語の中の仮数部の位置はシステムによるが, 1語の最下位 bit が仮数部の最下位 bit であることが多い. src/env2/repsl にこのようなチェックをする プログラムが含まれている.
    7. システムに依存するパラメーターのうち 'INTMAX', 'REALMAX', 'REALMIN', 'REPSL' は大きく分けて,メインフレーム系の大型計算機とUNIX系の計算機とでは 次の値をとることが多い.
                                                      
                    メインフレーム系   UNIX系         
                                                      
        'INTMAX'    2147483647         2147483647     
                                                      
        'REALMAX'   0.7237005E+76      3.             
                                       4028236E+38    
                                                      
        'REALMIN'   0.5397605E-78      1.             
                                       1754944E-38    
                                                      
        'REPSL'     0.95E-5            1.2E-6         
                                                      
      

GLCGET/GLCSET(GLCSTX)

  1. 機能
    MATH1で使用する文字型の内部変数を参照/変更する. (GLCSTX は実行時オプションによる変更を許す.)
  2. 呼び出し方法
    CALL GLCGET(CP,CPARA)
    CALL GLCSET(CP,CPARA)
    CALL GLCSTX(CP,CPARA)
  3. パラメーターの説明
                                                
      CP      (C*8)     内部変数の名前.        
                                                
      CPARA   (C*(*))   文字型の内部変数の値.  
                                                
    

    以下にCPとして指定できる名前のリストを記す.

                                                                            
      'DCLRC'    (C)   実行時オプションを読み込む外部ファイル名             
                       (標準ライブラリにおける値は.dclrc)                  
                       .                                                    
                       ただし,この内部変数の値がそのままファイル名として   
                       用いられるわけではない. 備考を参照のこと.          
                                                                            
      'DUPATH'   (C)   ユーザー用の各種データベースファイルをおくパス名.   
                       標準ライブラリにおける初期値は' ' (空白:            
                       これはカレントディレクトリをあらわす).              
                                                                            
      'DSPATH'   (C)   システムがあらかじめ用意した各種データベースファイ   
                       ルを                                                 
                       おくパス名.標準ライブラリにおける値は,インストー   
                       ル時に (DCLDBASE) が示す値となる.                   
                                                                            
    
  4. 備考
    1. 内部変数を管理するための下請けルーチンとして 以下のものがある.
                                                                          
        GLCQNP(NCP)         内部変数の総数NCPを求める.                   
                                                                          
        GLCQID(CP,IDX)      内部変数CPの位置IDXを求める.                 
                                                                          
        GLCQCP(IDX,CP)      IDXの位置にある内部変数の名前CPを参照する.   
                                                                          
        GLCQVL(IDX,CPARA)   IDXの位置にある内部変数の値IPARAを参照する.  
                                                                          
        GLCSVL(IDX,CPARA)   IDXの位置にある内部変数の値IPARAを変更する.  
                                                                          
      
    2. GLCGET は上に述べたGLCQIDを呼んで 内部変数の位置を求め,GLCQVLによって値を参照する; GLCSETGLCQIDを呼んで内部変数の位置を求め, GLCSVLによって値を設定する. したがって指定した内部変数名が見つからないとき, エラーメッセージはGLCQIDが出力する.
    3. 内部変数の名前は,大文字・小文字の区別なく文字列を比較する 文字関数LCHREQを用いてチェックされるので, LCHREQが正しく移植されていれば, 小文字で指定してもよい.
    4. このルーチンが管理する内部変数を,外部ファイルを通した 実行時オプションによって変更することはできない. (なぜなら,再帰的なループに入り込んでしまうため.)
    5. 'DCLRC' が示す内部変数は, その内部変数の値がファイル名としてそのまま利用される わけではない. 実際に利用されるファイル名は GLQFNM が決める. 標準ライブラリではまずカレントディレクトリを探す. 次に内部変数'DUPATH'(ユーザーの指定するパス名)の さすディレクトリを探す. 最後に内部変数'DSPATH'(システムがあらかじめ 用意するパス名)のさすディレクトリを探す.

MSGDMP

  1. 機能
    メッセージを出力する. 指定するパラメーターに応じてプログラムは強制終了 または続行の制御を受ける.
  2. 呼び出し方法
    CALL MSGDMP(CLEV,CSUB,CMSG)
  3. パラメーターの説明
                                                                            
      CLEV   (C*1)     メッセージのレベルを                                 
                       'E','W','M'のうちから1つ指定する.                   
                       メッセージレベルの意味と作用は以下のとおり.         
                                                                            
                       'E': 重大なエラー.プログラムは強制終了する.        
                       [-1ex]0ex1ex}                                        
                                                                            
                       'W': 警告.                                          
                       何らかの処置をおこなってプログラムは続行する.       
                       [-1ex]0ex1ex}                                        
                                                                            
                       'M': メッセージ.                                    
                       何の変更もせずに(あるいは特に問題とならない変更を   
                       して) プログラムは続行する. [-1ex]0ex1ex}          
                                                                            
      CSUB   (C*6)     MSGDMPを呼んでいるサブルーチン名を指定する.         
                                                                            
      CMSG   (C*(*))   出力するメッセージ.                                 
                                                                            
    
  4. 備考
    1. 'E'が指定されたとき, システムに依存したエラー処理をおこなって強制終了する ルーチンOSABRTを呼ぶ. (詳しくは[here]節参照のこと.)
    2. サブルーチンの作用としては, 'W''M'は同じ作用をする. 2つのパラメーターの違いはユーザーの側で使い分けること.
    3. CMSGの最大文字数は174文字.
    4. メッセージを出力する出力装置番号は内部変数'MSGUNIT' (初期値は6)で決まる.
    5. 出力する最大メッセージ数は内部変数'MAXMSG' (初期値は20)で決まる.
    6. 1行に書く文字数は内部変数'NLNSIZE' (初期値は78)で決まる.
    7. 出力するメッセージのレベルは内部変数'MSGLEV' (初期値は0)で決まる.
    8. 下位にMSZDMPという名前のサブルーチンがある.

RTPGET/RTCGET

  1. 機能
    実行時オプションから内部変数を取得する.
  2. 呼び出し方法
    CALL RTPGET(CPFIX,CP,IPARA,N)
    CALL RTCGET(CPFIX,CP,CPARA,N)
  3. パラメーターの説明
                                                       
      CPFIX   (C*(*))      変数名の前につける接頭辞.  
                                                       
      CP      (C(*)*8)     変数名.                    
                                                       
      IPARA   (I,R,L(*))   変数の値.                  
                                                       
      CPARA   (C(*)*80)    変数の値.                  
                                                       
      N       (I)          内部変数の数.              
                                                       
    
  4. 備考
    1. 接頭辞とは,たとえば GLpGET/GLpSETの管理する 変数の場合 'GL:' のように, xxpGET/xxpSET'xx' 部分と ':'の組合せからなる.
    2. CP, CPARA として指定する文字型配列は, 1要素長の長さがそれぞれ 8, 80 でなければならない.
    3. 実行時オプションで該当する変数が指定されていなければ, IPARA, CPARA は変更されない.
    4. 実行時オプションは, 標準的には環境変数,コマンドライン引数, 外部ファイルを通して入手することを 念頭においているが,具体的な実装方法は機種に依存する. しかし,OSLIB(第[here]節参照)が正しく移植されて いることを前提として, 実際には以下のルーチンが下請けをおこなっている.
                                                                             
        RTPENV(CPFIX,CP,IPARA)   環境変数の値を得る.                        
                                                                             
        RTPOPT(CPFIX,CP,IPARA)   コマンドラインオプションの値を得る.        
                                                                             
        RTPXFL(CPFIX,CP,IPARA)   外部ファイルからオプションの値を得る.      
                                                                             
        RTCENV(CPFIX,CP,CVAL)    環境変数の値(文字型)を得る.              
                                                                             
        RTCOPT(CPFIX,CP,CVAL)    コマンドラインオプションの値(文字型)を得  
                                 る.                                        
                                                                             
        RTCXFL(CPFIX,CP,CVAL)    外部ファイルからオプションの値(文字型)を  
                                 得る.                                      
                                                                             
      
    5. 実行時オプションの指定方法として, 環境変数,コマンドライン引数,外部ファイルが使用できる 場合,その効力は,コマンドライン引数, 環境変数,外部ファイルの順である. (すべて指定されたら,コマンドライン引数による指定を採用する.)
    6. 実行時オプションが定義できない機種では, 実行時オプションが何も指定されなかったものとみなされる.

CFSRCH

  1. 機能
    パス名の先頭部分と末尾部分のリストの組合せから, 存在するファイル名を探す.
  2. 呼び出し方法
    CFSRCH(CPL,NP,CFL,NF,CFN)
  3. パラメーターの説明
                                                                          
      CPL   (C(NP)*80)   パス名の先頭部分のリスト.                       
                         長さ80の文字型配列.                             
                                                                          
      NP    (I)          配列CPLの長さ.                                  
                                                                          
      CFL   (C(NF)*80)   パス名の末尾部分のリスト.                       
                         長さ80の文字型配列.                             
                                                                          
      NF    (I)          配列CFLの長さ.                                  
                                                                          
      CFN   (C*(*))      最初に見つかったファイル名を返す 文字型変数.    
                                                                          
    
  4. 備考
    1. たとえばファイル名 /usr/local/bin/dclfrt について, 先頭部分とは /usr/local/bin/ をさす; 末尾部分とは dclfrt をさす.
    2. このサブルーチンは,CPL(1) から CPL(NP) の 先頭部分について,CFL(1) から CFL(NF) の末尾部分 との組合せからなるパス名をもつ ファイルが存在するかどうかを調べて,最初に見つかったファイル名を 返す. そのようなファイル名が存在しなければ空白からなる 文字列を返す.
    3. パス名の先頭部分として空白からなる文字列を与えると, カレントディレクトリについて,パス名の末尾部分からなる ファイルを検索する.
    4. このルーチンはシステムに依存する.つまり,CFSRCH は UNIX のようなツリー構造を持ったファイルシステムを念頭において 作成されており,メインフレーム系のようなファイルシステムに おいてはファイル名検索のルールを別途定義してやる必要がある. しかし,現在用意されているルーチンでも,内部的には単に2種類の 文字型リストを組合せてファイルが存在するかどうかを調べている だけなので,「先頭部分」,「末尾部分」という定義にこだわらずに, ファイル名を構成する要素としてこれらを与えてやればそのまま 利用することができる.ただし,「パス名の先頭部分として 空白を指定するとカレントディレクトリを検索する」という 仕様の制約から, 空白を指定しないようにするか,空白が指定されたときの動作を別途定 義する(たとえば,何もしない)必要がある.

関数の説明

LCHREQ

  1. 機能
    大文字・小文字の区別なく2つの文字列を比較する.
  2. 呼び出し方法
    LCHREQ(CH1,CH2)
  3. パラメーターの説明
                                                                            
      LCHREQ     (L)       2つの文字列が                                    
                           (大文字・小文字の区別なく)等しいとき           
                           .TRUE.を返す論理関数値.                         
                                                                            
      CH1,       (C*(*))   比較する文字列.                                 
      CH2                                                                   
                                                                            
    
  4. 備考
    1. CH1CH2の長さが異なるときは, 長い方の文字列と同じ長さになるまで,短い方の文字列の 後ろにブランクがあるものとして比較する.

IUFOPN

  1. 機能
    存在し,接続されていない(すなわち利用可能な)もっとも小さい 入出力装置番号を返す.
  2. 呼び出し方法
    IUFOPN()
  3. パラメーターの説明
                                             
      IUFOPN   (I)   装置番号を返す整数値.  
                                             
    
  4. 備考
    1. この関数は,1 から順に 99 までの装置番号に対応する 入出力装置の状態を問い合わせ,存在し,接続されていない (オープンされていない)最初の装置番号を返す. すべて利用不可能なときは 0 を返す.


Back to Main


Latex Source


地球流体電脳倶楽部 : 95/6/9 (Version 5.0)

NUMAGUTI Atusi <a1n@gfdl.gov>
Last Modified: Thu Aug 31 13:01:42 EDT 1995