■フラグって何?
そもそもここで言うフラグとは旗の意味です。
要するに旗が揚がっているかいないかと言う事を表しています。
通常フラグが揚(上)がっている状態を1、
フラグが下がっている状態を0として扱います。
1と0でONまたはOFF、あるかないかの2値を表します。
■フラグ変数と数値変数はどう違うのか?
フラグ変数として数値変数を使います。
使い方によっては同じものです。
0001 FLAG=0
0002 GOSUB @FLAGDISP
0003 FLAG=1
0004 GOSUB @FLAGDISP
0005 END
0006 @FLAGDISP
0007 IF FLAG==1 GOTO @L_OK
0008 'NG
0009 PRINT "FLAG=";FLAG;" ON"
0010 RETURN
0011 'OK
0012 @L_OK
0013 PRINT "FLAG=";FLAG;" OFF"
0014 RETURN
このプログラムで使っている変数FLAGは数値変数です。
0もしくは1を代入して使っている限りフラグとして機能しています。
しかしこのままでは変数1個でひとつのフラグの状態しか保持できません。
■フラグの値は2進数1ビットで表せる。
フラグの値は0もしくは1で表します。
プチコンではこれを実際にシステム変数TRUEとFALSEで設定していますね。
しかしプチコンの数値変数は32ビットでそのうちの20ビットが整数部を表し、
そのうち最上ビットは符号ビットという特殊なビットなので
実際には19ビット使う事が出来ます。
これは言い換えると19個のフラグとして使えるということです。
■フラグの処理を考える
それでは具体的にフラグをどうやって使うかですが、
フラグは基本次のような処理が出来れば問題ありません。
1)フラグをONにする
2)フラグをOFFにする
3)フラグを判断する
それではサンプルをみてみましょう。
0001 FLAG=0 ←フラグをONにする
0002 GOSUB @FLAGDISP
0003 FLAG=1 ←フラグをOFFにする
0004 GOSUB @FLAGDISP
0005 END
0006 @FLAGDISP
0007 IF FLAG==1 GOTO @L_OK ←フラグを判定する
0008 'NG
0009 PRINT "FLAG=";FLAG;" ON"
0010 RETURN
0011 'OK
0012 @L_OK
0013 PRINT "FLAG=";FLAG;" OFF"
0014 RETURN
基本的なフラグ処理が使われていますね。
しかしこのままでは変数FLAGは数値0と数値1しか使っていません。
1個のフラグしか処理されていない事になります。