DCLでは, 内部変数(パラメータ)が多く使われ, 内部変数管理ルーチンによって管理されている. 内部変数管理ルーチンとは, 設定された変数の値を保持し, 問い合わせに答えて値を返す機能を持ったルーチンで, 「掲示板」のよう な役目をするものである. このようなルーチンを使う理由は,
である. 複数のサブルーチンで情報を共有するには, COMMON BLOCK を使うこともできるが, これを多用するとプログラムの可読性を落とすことにつながるので, 電脳ライブラリでは極力 COMMON BLOCK の使用を避けている. また, サブルーチンの引数を少くすると融通の効かないサブルーチンになって しまうが, かといって, むやみに引数の数を増やすとかえって使いにくくなっ てしまう. このような問題を解決するのが 内部変数管理ルーチンである. もともと「パッケージの内部で使われる変数」という意味で, 内部変数という言葉を使っているが, その変数はパッケージ外からも設定/参照できるので, その有効範囲からすると C 言語の「外部変数」に似た性格を持つものである.
内部変数管理ルーチンは DclGetParm, DclSetParmという名前を持ち, あらかじめ, システムが用意した変数の値 (システムデフォルト) を保持している. この値は DclGetParmによって参照, DclSetParmによって変更することがでる. 電脳ライブラリの多くのルーチンでは, 必要なパラメタの多くを DclGetParmによって取得しており, ユーザーが何も指定しなければシステムデフォルトを使い, DclSetParmで値を指定すれば, その値を使うようになっている.
この内部変数は実行時オプションによって変更することもできる. 実行時オプションとは, プログラム実行時に外部環境と交信することによって 内部変数への介入を可能にするような指定である. 具体的には, 外部ファイル, 環境変数, コマンドライン引数など による交信手段を念頭においた概念であるが, それがどのように実現されているかは, システムに依存する. なお, 実行時オプションの効力は, システムデフォルトよりも強く, DclSetParmの指定よりも弱い.
実行時オプションに比べて DclSetParmによる設定は強力なので, その設定を実行時に変更することができないが, 実行時オプションより効力の弱い DclSetParmEXというルーチンも 用意されている. これを使えば, プログラム中でデフォルト値 (ユーザーデフォルト) を設定し, 実行時に変更することが可能になる.
内部変数の設定手段を, その効力の強さの順に並べると,
となる.
実行時オプションは, 「内部変数の名前」と「内部変数の値」の組合せからなり, 複数個指定できる.
環境変数を通してオプションを指定する場合, 例えば UNIX の C シェル環境で内部変数 'MESSAGE_LEVEL' を 1 に変更したいときには,
% setenv MESSAGE_LEVEL 1
とする.
このとき環境変数名はすべて大文字でなければならない.
また, コマンドライン引数を通してオプションを指定する場合は, 原則として内部変数の名前に - 記号を付け, さらに内部変数の名前と内部変数の値の間に '=' を入れて, -name=value という形式で指定する (環境変数名と違って大文字・小文字の区別はない). 例えば, sample というプログラム実行時に
> sample -message_level=1
とすると, 上記の環境変数の場合と同じ結果が得られる. ここで, '=' 記号の前後に空白を入れてはいけない.
外部ファイルを通してオプションを指定する場合は,
MESSAGE_LEVEL 1 INTERPRET_MISSING_VALUE .true.
のように, 内部変数の名前と内部変数の値を並べて書いたファイルを, たとえば .dclrc として カレントディレクトリに用意してやればよい. ここで, オプション名は第1カラム目から書きはじめ, オプションの値との間は1個以上の空白によって 区切らなければならない(タブなどを入れてはいけない).
なお, 環境変数, コマンドライン引数, 外部ファイルを通して 同じオプションを指定した場合には, 原則としてその優先順位はコマンドライン引数, 環境変数, 外部ファイルを通して指定したもの順になる. (コマンドライン引数による指定が一番強い.)