    モジュール  ☆

    　モジュールの機能を利用すると，プログラム単位間での変数の共有ができる。

    １．　モジュールは，public変数，share変数と外部手続き（外部関数定義，外部副プログラム，外部絵定義）から構成される。
      public変数は，モジュール全体，および，その変数に対する外部共用宣言(declare-external文)を書いたモジュール外のプログラム単位で共有される。
      share変数は，モジュール全体で共有される。

    ２．例（Share変数）
      次のプログラムで，2030行で定義された数値変数indexと数値配列stackは，モジュールstack内で共用される。
    1000 DECLARE EXTERNAL SUB stack.push
    1010 DECLARE EXTERNAL FUNCTION stack.pop
    1020 CALL push(12)
    1030 PRINT pop
    1040 END
    1050 !
    2000 MODULE stack
    2010 PUBLIC SUB push
    2020 PUBLIC FUNCTION pop
    2030 SHARE NUMERIC index, stack(100)
    2040 LET index=0
    2100 EXTERNAL SUB push(a)
    2110    LET index=index+1
    2120    LET stack(index)=a
    2130 END SUB
    2200 EXTERNAL FUNCTION pop
    2210    LET pop=stack(index)
    2220    LET index=index-1
    2230 END FUNCTION
    2240 END MODULE

    ３． モジュールには，モジュール本体，外部手続きの順に書く。
      モジュール本体には，public宣言，share宣言を書くことができる。
      主プログラムの実行が開始される前にモジュール本体が実行される。
      public宣言は，指定された変数や手続きがモジュール外でも利用できることを宣言する。
    PUBLIC NUMERIC 数値変数名 ,数値変数名 ,…
    PUBLIC STRING 文字列変数名 ,文字列変数名 ,…
    PUBLIC FUNCTION 関数名 ,関数名 ,…
    PUBLIC SUB 副プログラム名 ,副プログラム名 , …
    PUBLIC PICTURE 絵定義名 , 絵定義名 , …
      share宣言は，指定された変数がモジュール内で共用されることを宣言する。
    SHARE NUMERIC 数値変数名 ,数値変数名 ,…
    SHARE STRING 文字列変数名 ,文字列変数名 ,…
    SHARE FUNCTION 関数名 ,関数名 ,…
    SHARE CHANNEL 経路番号 , 経路番号 , …  (経路番号は， #1 ，#2 など)
      public文，share文で，数値配列，文字列配列を指定する場合は，変数名に上下限指定部を含めて書く。
    例
    MODULE m1
    PUBLIC NUMERIC a(2,2), b
    PUBLIC STRING s$(4)
    SHARE NUMERIC c(10)
    LET b=pi/4
      …………
    END MODULE

    ４．モジュール本体にmodule-option文を書くことができる。
      例   MODULE OPTION ANGLE DEGREES
           MODULE OPTION ARITHMETIC NATIVE
      module-option文はモジュール全体に効果を及ぼす。
      ◇ モジュール本体に書いたOPTION文の有効範囲はモジュール本体。
      ★ JISの規定では，OPTION文，MODULE OPTION文は，PUBLIC文，SHARE文以降に書かなければならないことになっているが，本BASICでは位置を逆にしなければ翻訳できないことがある。
      モジュール本体はプログラム単位と似ているが，モジュール本体に内部手続きを書くことは許されていない。

    ５．モジュール外からpublic宣言された変数や関数を参照するとき，それらを参照するプログラム単位ごとに declare-external文を書く。
    DECLARE EXTERNAL NUMERIC モジュール名.数値変数名 , モジュール名.数値変数名 , …
    DECLARE EXTERNAL STRING モジュール名.文字列変数名 , モジュール名.文字列変数名 , …
    DECLARE EXTERNAL FUNCTION モジュール名.関数名 , モジュール名.関数名 ,…
    DECLARE EXTERNAL SUB モジュール名.副プログラム名 , モジュール名.副プログラム名 , …
    DECLARE EXTERNAL PICTURE モジュール名.絵定義名 , モジュール名.絵定義名 , …

      数値配列，文字列配列を指定する場合には，副プログラムや関数定義の仮引数に書くのと同様に，括弧と(次元数－1)個のコンマを書く。
    例
    DECLARE EXTERNAL NUMERIC m1.a(,), m1.b
    DECLARE EXTERNAL STRING m1.s$()
      宣言された変数や関数を参照するとき，モジュール.変数名 のように書くことも，モジュール名. を省いて書くこともできる。