バイナリ・インテジャの入力を容易にするプログラムEnter_BinInt


48/49ではバイナリ・インテジャとして16進数,10進数,8進数,2進数が扱え,相互の変換や論理演算をサポートします.それは良いのですが,バイナリ・インテジャと実数を区別するため,頭に#を必ず付加しなければなりません.#をキーインするには,左シフト 3ですから,大量にバイナリ・インテジャを打つとなると面倒です.これでは32siiに負けてしまう!(32siiではBASEコマンドで16進モードに入ると,あとはただ1Fのように入れるだけでよく,頭には何もいりません)
そこでほんのちょっとしたプログラムを書いて,改善します.

Enter_BinIntプログラムリスト
注:
以下のプログラムリストは48gからパソコンへプログラムを転送して,打ち出したものです. 48gのプログラミングでは,《》→≧≦といった記号を多用します.これらの記号は1バイト文字で,16進で8016からFF16までのコードが使われています.これがそのままではパソコン上の表示が乱れるので,一定のルールで文字を置き換えています.例えば《は¥<<に,→は¥−>に,≧は¥>=等々に置き換えられます.この置き換えは,パソコンと48gの間でファイル転送すると自動的に行われます.ただし,あらかじめ次のような設定を行っておく必要があります.

%%HP: T(3)A(D)F(.);
DIR
  \GaENTER
    \<< \-> X
      \<< X NUM \-> Y
        \<<
          IF Y 48 \>= Y 57 \<= AND
             Y 65 \>= Y 70 \<= AND OR
          THEN "#" X +
          ELSE X
          END
        \>>
      \>> OBJ\->
    \>>
  OFF16
    \<< -62 CF -63 CF
    \>>
  ON16
    \<< -62 SF -63 SF
    \>>
END

使い方
ON16:使用する前に必ず実行する.画面上にUSERと表示されます.(フラグの62番と63番をセットします.単にUSERモードに入っただけではありません)
この状態で,先頭文字が0から9までかAからFまでの数字をENTERすると,自動的に#が先頭に付加され,バイナリ整数として認識されます.変数名などでAからFで始まる文字を入力したいときは’’で囲みます.
OFF16:終了します.フラグは元通りになります.USER表示も消えます.

解説:
上記プログラムは,Craig A. FinsethさんのHP-16 emulator(ファイル名はhp16cemu)を参考にしました.ただし,一部冗長なコードは省き,条件文も変えています.
\GaENTERという変数について:
この\Gaというのは実はギリシャ文字のアルファで上記ASCII変換ルールによって,置き換えられたものです.アルファENTERというのは特殊な予約名でして,システムフラグの62と63がセットされており,かつアルファENTERという変数が存在する場合,ENTERキーが押し下げられた時(すなわち入力がなされたとき),アルファENTERに書かれたルーチンを実行するようになっています.つまり通常のENTERキーの動作を横取りして,ユーザー定義できるわけです.(アルファENTERのことはマニュアルには記載がありませんが,48のFAQなどに書かれています)