SSDB解説書


[目次]
[はじめに]
[特徴を掴んでいただくために]
[プログラム一覧および必須事項]
[各プログラムの概要および起動方法]
[SSDB機能別命令一覧]
[SSDB起動方法]
[SSDB変数と式について]
[SSDB個別命令説明および記述例]
[SSDB全体的な注意事項]
[SS−DIET機能説明]


[はじめに]
SSDBは(株)システムサイトがオリジナル開発した、アプリケーション構築ツールです。
データベース操作をはじめ、あらゆるアプリケーションシステムを構築する道具として、
MS−DOS版完成後永年にわたり使用した後、移植にてWINDOWS版を開発しました。
インタプリタ言語ですので、実行スピードはコンパイルしたプログラムよりも遅くなりますが、
システム試験の容易さや、パソコンネットワークシステム構築が可能なことなど、そのメリット
には多大なものがあります。
本システムは開発ツールを販売する目的で製作したものではなく、「特注システム」開発を
主業務とする(株)システムサイトが、システムをいかに高信頼で経済的に作るかという観点
から改良を重ねて練り上げてきた結果としてのソフトです。
ソフトのオープン化の時流から、弊社のオリジナルソフトを広く利用していただこうと思い、
ここに提供させて頂くものです。以下にその言語仕様を説明しますが、完成したばかりのプログラム
ではなく永年にわたり使用してきたものであり、その信頼性はかなり高いものと自負しています。
開発ツールの開発経過を説明しますと、最初にMS−DOS版「SS−DIET」が完成し、
その後、MS−DOS版「SSDB」を完成させ、共にWINDOWSのWIN32版に
移植しました。さらにそこへWINDOWS特有の命令を追加しました。
MS−DOS版はNECのPC−98専用ですが、WINDOWS版はDOS/Vマシンでも、
動作可能です。
最後に、本システムは自由に使って下さい。但し、それによる一切の責任は負いません。


[特徴を掴んでいただくために]
本システムの特徴を短時間で把握していただく為にサンプルプログラムを用意しました。
最初に下記の説明を読んでいただいた後、起動してみてください。
(1)MS−DOS(PC−9801)版で、NEC独自仕様の全角・半角罫線コードを使った
   ために、WINDOWS版への移植作業では、難儀をしました。これらのコードは
   できる限り表示可能なようにしていますが、もし、罫線が表示されないような場合は、
   ALT(GRPH)ボタンを押しながら、マウスの左ボタンを1回押すとフォント体系を
   変更するメニューが出ます。
   変更された情報はカレントディレクトリの FONTNAME. ファィルに保存されます。
   FONTNAME の構造 1:フォント名 2:コード体系0か1(普通は1にする)
   3:0から255の数値で、バックの青色度を指定します
   バックの色を青くするのには CTRL+I(UP),D(DOWN),B(BLACK)が使えます。
(2)SDB_BASE以外のプログラムを起動する場合に、 /^^SYSLIN という
   スイッチを付けると、システムラインが表示されるので、WINDOWSの大きさを
   変更することができます。逆に、そうでない場合は、フルスクリーンに表示されます。
(3)プログラムはフルスクリーンタイプや最大・最小メニュー付きタイプ等がありますが、
   プログラム終了ボタンの使えるタイプはここでは提供しません。
   また、スクロールバー付きのタイプと無しのタイプがありますが、スクロールバー付きの
   タイプはここでは提供しません。
   従って、WINDOWを小さくすると、文字も小さくなります。
(4)マウスは通常は不要です。フルスクリーン起動ならマウスカーソルは表示されません。
   ただし起動時のスイッチとして /^^MOUSE を使用すると矢印カーソルが表示されます。
   また、SDBの「MOUSLOC」命令を実行した場合も矢印カーソルが表示されます。
(5)文字画面はNECのPC−9801仕様どおりで、横80桁の縦25行に固定です。
(6)プログラムを動作させる前に必ず[SDB_BASE.EXE]を1度起動します。
   一度起動するだけで良いのですが、このプログラムはタスクトレイに入ります。
   しかしこのこと以外、どのアプリケーションもWINDOWSに対して特殊な処理はしません。
   起動したフォルダ内以外に、例えば設定ファィル等を直接変更することなどは一切ありません。
(7)本システムはMS−DOS版の移植プログラムですので、見た感じがWINDOWSの
   アプリケーションらしくありませんし、SSDBのスクリプトにしても、仕様が
   いわゆる「イベントドリブン」ではありません。
   逆に手続き型に慣れたプログラマーにとってはとっつき易い仕様だと云えるでしょう。
(8)画面上の文字データをWINDOWSのクリップボードへコピーする方法としては、
   CTRL ボタンを押しながら、マウスの左ボタンを1回押すことで可能です。
(9)例えば「表計算ソフト」など、他のソフトとの連携機能としては、テキストファィルを簡単に
   作成することが出来るということで、対応します。また、そのデータファィル名を利用して
それに関連するアプリケーションを起動することもできます。


[プログラム一覧および必須事項]
本システムのモジュールをコンピュータ上に展開する方法については、試供版の README.TXT
ファィルに説明しました。カレントディレクトリ上で展開して頂ければ良く、WINDOWS
システム関連のどんなファィルも勝手に更新するようなことはありません。

**** 最初に必ず実行して頂きたいプログラムが一つだけあります。 ****
   SDB_BASE.EXE を起動してください。アーギュメントは不要です。

[SDB_BASE 以外のプログラム一覧]
S_SSDB.EXE SSDBプログラムインタプリタA
WINSSDB.EXE SSDBプログラムインタプリタB
S_SSDB.MES  同上 実行時エラーメッセージ(上と同じ場所に置いて下さい)
  インタプリタのタイプAとBの違い
  タイプA:SS−DIETなどの[CHILD]命令で起動するモジュールを外部として持つもの。
       だから、プログラムサイズが小さい。
  タイプB:SS−DIETなどの[CHILD]命令で起動するモジュールを内部に持つもの。
       だから、プログラムサイズが大きい。
WINDDIET.EXE SS−DIETのVer.4は WINSSDB.EXE に取り込まれてあり、
Ver.5だけが別置きのEXEとなっています。
WINDINI.EXE SS−DIET(Ver.4用) 表要素定義プログラム
WINDDIET.EXE SS−DIETのVer.4は WINSSDB.EXE に取り込まれてあり、
Ver.5だけが別置きのEXEとなっています。
WINDDINI.EXE SS−DIET(Ver.5用) 表要素定義プログラム
WINDPRN.EXE SS−DIET表要素印刷プログラム
WINDEFO.EXE 表定義内容出力プログラム
WINENVD.EXE 表隠し状態設定プログラム
WINHSAV.EXE 表データテキスト出力プログラム
WINFPIC.EXE データ抽出プログラム
WINHYOL.EXE 帳票印刷プログラム
WINLABL.EXE ラベル印刷プログラム
WINSORT.EXE データソートプログラム
SMMO.EXE マルチメディアオーサリングツール

その他各種ドキュメントファィル、ヘルプファィル、SSDBサンプルファィル
尚、試供版などに含まれるかどうかの説明は、個別に README.TXT などで確認して下さい。


[各プログラムの概要および起動方法]

漢字変換ツールバーの自動起動について(2001−3−28 追加)
  環境変数 FEP_ONOFF=n のnを0,1,2に設定することで、下記の効果があります。
  =0:ツールバーを常に起動させておき、プログラムでは全角/半角を自動的に切り替える。
  =1:プログラムがツールバーを起動/停止(半角入力)させる。
  =2:プログラムではツールバーの操作を一切しない。

(1)SDB_BASE.EXE
ベースになるプログラムです。必ずあらかじめ起動しておきます。
同じディレクトリに存在する SDB_BASE.INI ファィルの内容が、システム全体で
使用する資源量を定義します。当初は設定を気にしないで下さい。
(下記はデフォルト値です)
SEMAPHORE=32 使用するセマフォの最大数(1〜100まで)
セマフォ名は[SEMA1〜SEMA100]
EVENT=32 使用するイベントの最大数(1〜100まで)
イベント名は[EVENT1〜EVENT100]
EXECEVENT=32 他の同期プログラム起動用イベントの最大数
(1〜32まで)イベント名は[EXECEVENT1〜EXECEVENT32]
SSCGIEVENT=64 WWWサーバへ1端末からログオンすれば、起動用と完了用の
2つのイベントが要る。その「同時ログオン最大数」の2倍
をセットする。これは、下記COMAREA0のサイズと
直接関係ありますが、一応最大は200までとなっています。
イベント名は[SSCGIEVENTn]
SS_MUTEX=64 ミューテックス SS_MUTEXnn (1〜64) SDBを独占で走らせる用に追加した。
COMIDMAX=2 以下でCOMAREAnまでの共通エリアを定義する旨の
nの最大を書きます。1つの共有エリアを64KByte以内
と限定したファイルマッピングです。(セキュリティなし)
この情報をもとに、システム基本量定義ファィル SYSTEM_B.BSC
が作られます。また、内部では共有エリアアクセス用にセマフォ
FILEMAPSEMAn が使われます。
COMAREA0〜2は必須で本定義が無くても作られます。
COMAREA0=4000 ファィルマッピングファィル名 COM_AREA.000
そのシステム特有のメインテーブルを置くものですが、
現在のところ、CGI用に確保しています。
13 x SSCGIEVENT Byte以上としておきます。
COMAREA1=1024 ファィルマッピングファィル名 COM_AREA.001
共通記憶用エリアとしてのシンボルと値を記憶する場所です。
ここはずっと継続させるか、都度エリアを0クリアするかは
スタート時のファィルの有無によって区別します。
つまり、ファィルが存在しないときは0クリアするが、
最初から存在すれば、なにも触りません。
COMAREA2=33280 ファィルマッピングファィル名 COM_AREA.002
プロセス間のイベント渡しデータエリアです。 32 event x 130バイト x 8アーギュメント
(COMAREA3=1024) ファィルマッピングファィル名 COM_AREA.003
3 以上 では、パイプに先入れ先出しデータを入れて
アプリケーション間でのやりとりに利用できます。
ED1[8000] を利用するなら COMAREA4 として65000バイトを
EM1[500] を利用するなら COMAREA5 として65000バイトを
ED2[8000] を利用するなら COMAREA6 として65000バイトを
EM2[500] を利用するなら COMAREA7 として65000バイトを
また、COMAREA8 として65000バイトを定義すると、DEFファィルの読み込みが
初回以後、メイン共有メモリを利用するので、スピードアップします。
尚、このプログラムの動作には様々なタイプがあり、ここでは説明しませんが、
終了させずにWINDOWSを終了させても何の影響もありません。
ひとつのタイプとして、起動するとすぐタスクトレイに入ってしまうタイプがあります。
この時、シフトキーを押しながらマウスでクリックするとウィンドウが現れますので、
さらに、シフトキーを押しながら[Q]キーを押すと、2秒後に終了します。
何もしないで置くと再びタスクトレイに入ってしまいます。
WINSSDBなどで、プログラム実行中にループに入ってしまった場合など、
弊社のすべてのアプリケーションプログラムを終了する手段になります。

更に、プログラム名に[起動コマンドファィル(BAT,CMD)名]と[動作ディレクリト]を
続ける起動の仕方をすると、自動的にそのコマンドが実行されます。

(2)WINSSDB.EXE SSDBプログラムインタプリタ
起動方法はここをつまんでください。
S_SSDB.MES は同じ場所に置いて下さい。
S_SSDB.EXE は、WINSSDB.EXE の一部機能を別プログラムとしたもので、サイズが小さい反面、
会話処理に制限があります。
(3)WINDDIET.EXE SS−DIETのVER.4は WINSSDB.EXE に取り込まれてあり、
   Ver.5だけが別置きのEXEとなっています。このプログラムが別のEXEと
   なっているのは、開発手順上の都合からだけの理由です。機能の追加はあるのですが、
   また、WINDIET.EXE(Ver.4)の起動は、SSDB命令のCHILD命令を参照してください。
   後述する「SS−DIET説明」の中には、いろいろなデータ操作用プログラムが
   登場しますが、その多くはSSDB命令のCHILD命令で起動できるようになりました。
(4)WINDINI.EXE SS−DIET(Ver.4用) 表要素定義プログラム
   SS−DIETはもちろん、SSDBのH変数を利用する場合でも、フィールド定義
   をするプログラムが必要です。本プログラムを起動すると、定義ファィル名から、
   各フィールドのサイズ、属性、ファンクションキーの設定などを書き込んだファィル
   (拡張子は[DEF])ができあがります。
   このファィルをもとに、表へのデータ入力をしたり、データベース操作言語を動かしたり
   します。
(5)WINDDINI.EXE SS−DIET(Ver.5用) 表要素定義プログラム
(6)WINDPRN.EXE SS−DIET表要素印刷プログラム
   上の(4)のプログラムが内部で使用するもので、ユーザの直接操作は不要です。
(7)WINDEFO.EXE 表定義内容出力プログラム
   上の(4)で述べました表の要素を定義したファィル(****.DEF)の内容は
   テキストファィルですので、エディタでも確認できますが、確認し辛いことから、
   その内容をファィル($.)に出力するものです。
   起動すると、カレントディレクトリ上の全部のDEFファィルが表示され、選択します。
   確認だけでなく、SSDBのH変数を定義する時のフィールド番号をセットするのに
   役立ちますので、含めてあります。
(8)WINENVD.EXE 表隠し状態設定プログラム
   フィールドの各要素を一時的に隠す機能を「表隠し」と呼びますが、この状態は
   表データ操作中でも登録することが可能ですが、あらかじめ設定しておくことも可能
   であり、そのためのプログラムです。
(9)WINHSAV.EXE 表データテキスト出力プログラム
   SS−DIETのデータは固定長フィールド、固定長レコードのバイナリーデータ
   を扱えるようになっています。そのビット構造まですべてが明確になってはいるものの
   他のプログラムでそのデータを利用するには、変換プログラムを作る必要が有ります。
   たとえば市販の表計算プログラムなどから直接利用したい場合などでは、テキスト形式
   のデータを読み込めるのは常識です。そこで、このプログラムでテキスト形式のデータ
   を出力するのです。同じことはSSDBプログラムで作成すると、簡単に実現できます。
   
この他のプログラムについては、SSDBの「CHILD」命令や、「SS−DIET」の
説明を参照して下さい。
   


★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  データベース操作言語 SSDB[機能別命令一覧表]
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

[プログラムの流れ、条件判断、サブルーチン]
IF I > 1000 条件判定をする
ELSE
FI

    FOR I = 1; I <= 1000; I++ 繰り返す
FORNEXT C > 15
FOREND A < 100 && B > 1
ROF

GOTO ジャンプする

BRANCH ジャンプする

GOSUB サブルーチンを実行する
RETURN

STOP プログラムを一時停止させる
BREAK プログラムを一時停止させる
ONSTOP STOP 命令を有効にする

GETTIME グリニッジ時間をとる

SETTIME グリニッジ時間をセットする

WAIT この命令の部分で単純に時間待ちをさせる

USERNAM 現在のログインユーザ名を知る
VERSION プログラムのバージョンを知る
BASEEND 基本プログラムを終了する
END プログラム終了

[シーケンシャルファィル 読み書き]
SROPEN ファィル読み込みオープン
SWOPEN ファィル書き込みオープン
SAOPEN ファィル追加オープン
INPUT 一行読み込み
PRINT 一行書き込み
CLOSE ファィルクローズ

[ファィル/ディレクトリ操作]
KILL ファィル削除
RENAME ファィル名変更
FCHECK ファィル存在チェック
FLCOPY ファィルコピー
FLMOVE ファィル移動
BFLCOMP ファィルのバイナリー比較
DIRMNT ディレクトリ操作
?FILNAM どういうファィル名が存在するか調べる
FRECMNT ランダムファィルのレコード挿入/削除
FLSTAMP ファィル書き込み日付を取得する
FGETPUT ファィルの一部レコードを読み書きする
ELGETPUT ファィルの一部フィールドを読み書きする
RECMOVE 2つのファイルとレコードサイズを指定して、1レコード移動をする
MERGE ファィルの結合をする
KEYOUT H変数ファィルのキーを吐き出す

GETTMP テンポラリファィルを作成する

[ファィル排他関係]
READONLY 以後のH変数OPENはREADモードとなる
NORMALAC 以後のH変数OPENはREAD/WRITEモードとなる
HAITA 指定ファィルの占有を宣言する

[クリップ関係]
CLIP クリップデータエリア宣言
DIVID クリップデータを分割する
INTEG 分割データをクリップデータにする
OUTCLIP 変数をクリップファィルに出力
INCLIP クリップファィルより変数に入力

CLPSET クリップ変数の任意箇所へのアクセス

[画像・音声出力、別のSDBへのリンク関係]
OUT 画像や音声出力、別のSDBへリンクする

[文字スクリーン(横80カラム・縦25行)への文字の表示]
文字属性について
CLS 画面を消去する
DISPL 指定位置へ、指定色で左詰めで文字列表示
DISPR 指定位置へ、指定色で右詰めで文字列表示
DISPF 指定フォームで変数を画面に表示する
PRINTF フォームを使わず簡略的に変数を表示する
CTORI 画面全体をそのまま退避する
CMODOSI CTORI で退避させてある文字を画面に戻す
SCROLL 画面全体または一部をスクロールさせる
MENUDSP メニューを表示して選択させる

[グラフィックスクリーンへのグラフィックの表示]
GCLS グラフィック画面を消去する
ALLCLS 文字とグラフィック画面両方を消去する
GWCLS グラフィック画面の一部を消去する
GTORI グラフィック画面全体をそのまま退避する
GMODOSI GTORI で退避させてある画面に戻す
BITBLT グラフィック・プリンタ・メモリの各領域内で転送をする
SCROLDC グラフィック・プリンタの各領域内で転送をする
GOUTDV グラフィック・プリンタ・メモリの領域指定を変更する
GBASE グラフィック・プリンタ・メモリのベース位置を指定
LINE 直線を引く
RECT 四角形を描く、またはパターンで塗りつぶす
CIRL 円を描く、またはパターンで塗りつぶす
POLYGON 多角形を描く、またはパターンで塗りつぶす
TMOJI グラフィック文字を縦に描画する
YMOJI グラフィック文字を横に描画する

[キーボードからのデータの入力]
IN キーボードから入力文字列を取り込む
GETK どれかのキーがひとつ押されるのを待つ
CASE IN、GETK 命令の時に特殊なキーの判定をする
INKEYC シフトキーなども含めて、キー状態を見る

[マウスの位置を調べる]
MOUSLOC マウスの位置と左ボタンの状態を知る

[マウスカーソルON/OFFをする]
MOUONOF マウスカーソルON/OFFをする

[電卓機能]
DENTAK 電卓の窓を開いて計算できる

[データを画面上で選択する]
CODINI コードセル初期化
CODSEL コード選択
CODEND コードセル終了
CODOPN コードセルデータのオープン
CODGET コードセルデータの取得
CODCLS コードセルデータのクローズ

[内部DIET関係]
DIET DIET会話をする
DIETSEL DIET会話中にコードセルを使う
DIETGPT DIET会話中にコードセルデータをGET/PUT
DIETMAX DIET会話中に最大レコード数を得る
DIETTIT DIET会話中にフィールドのタイトル変更
DIETHAB DIET会話中に表示枠幅サイズを変更する
DIETHID DIET会話中に隠しパターンを設定する
DIETATR DIET会話中に横ラインの属性設定をする
DIETSUM DIET会話中に縦横合計をする
CODFCHG DIET開始前にコードセルファィル名を変更
DIETHELP DIET会話中に「ヘルプ」キーを押した時の処理
DIETNUL DIET中の行がヌル行かどうかを聞く

[ビープ音を出す]
BEEP ビープ音を出す

[画面エディタLite]
EDITOR 画面上での簡単なテキスト編集をする

[漢字入力ON/OFFをする]
IMEONOF 漢字入力ON/OFFをする

[プログラムデバッグ用に使用する]
TESTP 指定した変数の内容を表示する
TESTK どれかのキーが押されるまで待機する

[オペレータとの会話処理関係]
YESNO 「はい」「いいえ」を選択させる
NYESNO WINDOWSダイアログのYES/NO
ERREC エラー確認をさせてどれかのキーを押させる
RECOG 確認事項を確認をさせ、キーを押させる
MSGBOX 確認事項を確認をさせ、キーを押させる
R_FILE 読み込みファィル名を聞く
W_FILE 書き出しファィル名を聞く
LOCGET 画面位置情報を読みxy座標情報をセット
LOOP 会話ループにはいる
POOL LOOP からここまで
SETSYM 会話番号指定

[内部処理関係]
LEFT 文字列の左から指定文字数分をとる
RIGHT 文字列の右から指定文字数分をとる
MID 文字列の中から指定文字数分をとる
STRCAT 文字列を連結させる
MONEY 金額に,を付けた文字列とする
DATE 万年暦を日付文字列に変換する
MANN 日付文字列を万年暦に変換する
WEEK 曜日の文字列を得る
CUT 文字列の両側の空白をカットする
RPACK 文字列を指定サイズ内で右詰めにする
SYOSU 少数指定桁以下を切り捨てあるいは四捨五入
ROUND 演算の丸め精度を指定する
SORT1,2,3,4 データをソートする
XOR 排他的論理和を計算する
HEXSET 16進値を変数にセットする

ZEICAL 消費税計算、逆計算をする

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[他のプログラムを起動したり、処理を委託したりする関係]
SYSTEM 他のプログラムを起動する
EXECPRG 他のプログラムを起動して完了を待つ

[データベース変数の操作関係]
HRMAX H変数の最大レコード数を知る
HFCHG H変数の対象ファィル名を変更する
MOVE H変数間でレコードのコピーをする
NLMOVE H変数に空の1レコードを作る
HFLCLS H変数をクローズする
HFLCOMP H変数のレコード比較をする
DEFCOPY H変数の定義をH99にコピーする
TSUM H変数のファィルに対して縦合計を計算する
SEARCH 諸変数の中から指定データをサーチする
SCHSTEP SEARCH 命令のレコードステップ幅を指定する

[システムとのやりとり]
ARGV アーギュメントを取り込む
GETENV 環境変数をとりこむ
?SIGEN コンピュータ資源をファィルに1行ずつ取る

[プリンタ出力関係]
CPRINT 1バイトをプリンタへ出力
LPRINT フォーム指定で一行プリンタへ出力
HYOPRT フォーム指定で一ページ分プリンタへ出力

PRINTP 自由なフォームサイズで印刷をする(Ver.4以降)

[IOポートへの直接出力関係](WIN32版は除く)
PTINP ポートIN(バイト)
PTINPW ポートIN(ワード)
PTOUT ポートOUT(バイト)
PTOUTPW ポートOUT(ワード)

[シリアル伝送関係]
RSINIT シリアル伝送初期化
RSINP シリアルポート1バイト読み込み
RSREAD1 シリアルポート読み込み タイプ1
RSREAD2 シリアルポート読み込み タイプ2
RSREAD3 シリアルポート読み込み タイプ3
RSOUT シリアルポート1バイト送り出し
RSSEND シリアルポート複数バイト送り出し
RSFRD シリアル伝送 ファィル読み出し
RSFWT シリアル伝送 ファィル書き込み
RINGC シリアル伝送 電話をかける
RINGE シリアル伝送 電話を切る
TELON ダイアルアップで電話をかける
TEL?? 電話の状態をチェックする
TELOFF ダイアルアップ電話を切る
TELNOP ダイアルアップ命令を素通しする

[WINDOWSコントロール](WIN32のみ)
WINTITL タイトルを変更する
WINDOMAX ウィンドゥを最大にする
WINDOMIN ウィンドゥを最小にする
FOCUSGET フォアグラウンドにセットする
FOCUSMAN フォアグラウンドにセットする
PRIOSET 自分の実行優先度を変更する
SYSLIN ウィンドゥのシステムライン操作
WINDISP ウィンドゥの表示を操作する

DIAGOUT 画面イメージ要求をする

GAMENO 画面イメージを実際に表示する

WINSYS 他のウィンドゥを閉じたり大小する

WINLOC 他のウィンドゥの表示位置とサイズを勝手に決める

[ネームドパイプ関係](WIN32のみ)(CREATEできるのは、NTのみ)
PIPEINI ネームドパイプ初期化(作成・オープン)
PIPEGET ネームドパイプからデータをGET
PIPEPUT ネームドパイプにデータをPUT
PIPECLS ネームドパイプ使用終了

[WINSOCK関係](WIN32のみ)
 SOCKINI WINSOCK初期化
SOCKGET WINSOCKデータGET
SOCKPUT WINSOCKデータPUT
SOCKCLS WINSOCK終了
SOCKNAM WINSOCK相手のIPを知る

[ディスクパイプ関係]
DBUFINI ディスクパイプ初期化
DBUFGET ディスクパイプからデータをGET
DBUFPUT ディスクプパイプへデータをPUT

[セマフォ関係](WIN32のみ)
SEMASET セマフォを要求する
SEMARST セマフォを解放する

[イベント関係](WIN32のみ)
EVNTWAT イベント発生待ちをする
EVNTSET イベントをセットする
EVNTRST イベントをリセットする

[ミューテックス関係](WIN32のみ)
MUTEXIN ミューテックスをセットして占有モードに入る
MUTEXOUT ミューテックスをリセットして占有モードを解放する

[オブジェクト指向関係](WIN32のみ)
    OBJECT 他のプロセスに処理を依頼する

[子プロセス実行](WIN32のみ)
CHILD SSDB,DIET,FPIC,SORT,HYOU,PICK,PIDX,DDIT

[セキュリティ化関係](WIN32のみ)
SECUSS ファィルをセキュリティ化する/復元する

[パスワード関係](WIN32のみ)
PASWGET パスワードメンテナンスファィルの読み出し
PASWPUT パスワードメンテナンスファィルの書き込み

[イントラネット関係](WIN32のみ)
HTMLOUT WINSOCKより HTML ファィル を SEND
SSCGI CGIとのやりとり用
CGIIN CGIを通じて、入力データを得る
CGIOUT CGIを通じて、HTMLをSEND
以下は Ver. WIN32.007 以降の SSDB21.EXE,WEB_SSDB.EXE のみ
HSTART HTML 書き出し スタート
HT HTML そのまま書き出し
HV HTML 変数の内容を
HC HTML コードセルや日付サポート
HEND HTML 書き出し スタート

[WINDOWSのクリップボード関係](WIN32のみ)
CLIPPUT クリップボードへテキストを書き込む
CLIPGET クリップボードからテキストを読み出す

[共有メモリ(ファィルマッピング)関係](WIN32のみ)
COMPUSH 共有エリアにデータをPUSHする
COMPOP 共有エリアからデータをPOPする
COMSAVE 共有エリアにシンボル付きデータを保存する
COMLOAD   共有エリアからシンボル付きデータを取り出す
COMREAD   共有エリアのシンボルとデータを全て取り出す

[HELP 表示関係](WIN32のみ)
HELP ヘルプ内容を表示する

[郵便番号のサポート関係](WIN32のみ)
YUBIN 郵便番号から住所を調べる、またはその逆を調べる。

使用可能関数一覧
ABS ACOS ANK ASC
ASIN ATAN ATAN2 CALCU
C_GET CEIL CLIPM COS COSH
CUT DATEZ DTMAX EXP
FLOOR FMOD HANKA HEX JSCMP
KANAK KJSET KSPC LEFT
LOG LOG10 LOWER MASK
MID MJSET MOD MOJI
POINT POW RAND REPLC
RIGHT RSGET SEIRK SIMES SIN
SINH SPACE SPC SQRT
SRAND STCAT STLEN STLOC STLBK
STNLC STNBK STR TAN TANH
TIME TOSIH UPPER VERNO
WAKU YOBI ZENKA ZEROP


特殊命令について



★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 [起動方法]
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 [WINDOWS−95、NT] にて

  A>WINSSDB [プログラムファィル名] AA BB CC

    アーギュメント説明
           AA:シーケンシャルファィルの同時最大OPEN数
BB:= D :デバッグモード = T : トレースモード
= N :CC以降が存在する場合は N とする。
                 CC以降が無ければ、不要
CC:ここ以降がプログラムに渡すアーギュメントである。
プログラムでの取り込み方法は以下の本文中を参照。

また、スイッチ /^SYSLIN をつけると、フルスクリーンではなく、
システムラインが表示され、WINDOWの操作が可能となる。
ただ、注意しないといけないのは、起動時のスイッチではあるが、SDBプログラ
ムからみれば、1アーギュメントになるので、無視する処理が必要となる。

  また、起動時 スイッチ /CHILDnn を付けると、チャイルドnnの待機
  状態となる。SDBでCHILD命令を発して、実行させる。
  普通はnn=1(WINSSDB)とnn=8(WINDDIET)にしか使わぬ
  さらに、/CCHILDnn では、起動プログラムが最小化でスタートする。
また、/^MOUSE を付けるとマウスカーソルとして矢印マークが表示される

 [PC−9801 MS−DOS] にて

   A>FSDBnnnn [プログラムファィル名] AA BB CC

   MS−DOS版はメモリサイズの関係上、機能を選択させていろいろなEXE
   を用意している。

「TSUM使用するか?」「MMOファィルの描画あり?」「音声出力あり?」
「会話 インターフェースルーチン あり?」「グラフィック文字表示 あり?」
「HYOPRT使用するか ?」「ポートIN/OUTあり?」
「RS-232C標準・拡張ポートあり?」「DIET ライブラリ 使用する?」

   この機能の組み合わせにより、 nnnnの数値が変わる。
通常は fsdb1011.exeを使うことが多い。

    アーギュメント説明
           AA:シーケンシャルファィルの同時最大OPEN数
BB:= D :デバッグモード = T : トレースモード
= L :グラフィックスを使用しないので、 GRAPH.SYS
を CONFIG.SYS にセットしていない場合
= N :指定なしだが、CC以降が存在する場合
CC:ここ以降がプログラムに渡すアーギュメントである。
プログラムでの取り込み方法は以下の本文中を参照。




★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    変数名について
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

  プログラムは先頭に VAL ** のパターンで[変数定義]を並べる。

     VAL V**   −− long値

     VAL C**   −− キャラクタ値

VとC変数だけは初期値をとれる
  例:VAL V15 = 12
VAL C10 = OSAKA
VAL C20 = "OSAKA"
この3番目の "___" の場合は、中には " と ' の文字は使用できない
この制限は初期定義の場合のみであり、本文中なら "" や '' と書く
ことにより、可能であるる

     VAL D**[n] −− long配列

         但し、D90−D99は浮動小数点数値をもつ

     VAL M**[n] −− キャラクタ配列

     VAL H**[m][n] −− HYOの配列
[m]:定義ファィル名をmに拡張子を除いて記入
[n]:ここが無ければ定義ファィルで宣言されたファィル名を
あれば、対象ファィルをnにする
ドライブ・ディレクトリも含めてフルネームを指定

     H変数の場合、式中での意味は H**[m][n]だとすると、
     m:レコード(1から)   n:セル(1から) である。

     配列の添え字は全て 1 から 始まる
     変数名の**は 0から 99 までしかとれない

  宣言無しの変数 A−Z(LONG値)     A$−Z$(文字型)

. ★MS−DOS版のみの変数について

   グラフィックエリアの裏画面を文字変数 GM[1] から GM[1000]

   として使用できる。これには宣言は不要である。

   文字列128バイト長 x 1000 配列分 使える

 ★WINDOWS版のみの変数について

  宣言無しの変数として、A−Z、A$−Z$の他、更に任意の文字数の変数が
  使える。但し、型が決まっていて、 数値なら ! を 文字なら $ を
  後ろに付ける。

  例:ZAIKO!  NAME$ など


 ★EDn,EMn変数について

MS−DOS版では、EMS領域を利用した変数 EDn,EMn (n = 1 - 16 )
が利用できたが、その概要は、「DIMED 1 8000」 や 「DIMEM 1 500」 などの命令を
実行すると、以後 EM1[**](文字) , ED1[**](High long) などの変数を利用できる
というものである。
一方、WINDOWSでは、この変数は[共有メモリエリア]にある変数となる。
使用のための宣言は不要だが、SDB_BASE.EXE において、COMAREAの宣言が
必要である。
ED1[8000] を利用するなら COMAREA4 として65000バイトを
EM1[500] を利用するなら COMAREA5 として65000バイトを
ED2[8000] を利用するなら COMAREA6 として65000バイトを
EM2[500] を利用するなら COMAREA7 として65000バイトを
以下同様
また、サイズを65000以下とすると、SDBプログラムが異常停止をするので
注意のこと。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  式に使用可能な記号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

+ , - , * , /
== : 一致 != : 不一致 <= : 小イコール
>= : 大イコール < : 小 > : 大
{{ : 文字列比較左から
{} : 文字列が含まれるか
}} : 文字列比較右から
&& : AND論理
|| : OR論理

[文字列比較についての補足説明]

IF A$ {{ B$ の意味
A$:調べられる文字列   B$:キー文字列
A$とB$を並べて左一致するかとみるが、B$の方が長ければ成立せず

IF A$ }} B$ の意味
A$:調べられる文字列   B$:キー文字列
A$とB$を並べて右一致するかとみるが、B$の方が長ければ成立せず

IF A$ {} B$ の意味
A$:調べられる文字列   B$:キー文字列
A$もB$も中にあるスペース(半角全角ともに)を取り去った上で、文字列A$
の中のどこかの位置に文字列B$が存在するか? とみる。当然B$の方が長ければ
成立せず。




★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
[SSDB個別命令説明および記述例]
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆IF文
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
条件どおりならFIがあるか、ELSE まで
条件外ならELSE以降 FI までを実行する。

IF 条件式
・・・・・
・・・・・
ELSE
・・・・・
・・・・・
FI

条件比較文字
== ・・・ 等しいとき
<= ・・・ 小なりイコール
>= ・・・ 大なりイコール
<  ・・・ 小なり
<  ・・・ 大なり

複数の条件式を組み合わせる
&& ・・・ 且つ(AND)
|| ・・・ あるいは(OR)


例1)変数Aが1のとき変数Bに変数Aの値をセット
 変数Aが1でないとき変数Cに変数Aの値をセットする。
IF A == 1
B = A
ELSE
C = A
FI

例2)変数Aが1且つ変数Bが1のとき 変数Cに変数Aの値をセットする。
IF A == 1 && B == 1
C = A
FI

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆FOR文 FOREND 文
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
ROFまでの間を実行する。

FOR 初期式; 最終条件式; 1回毎の処理

      FOR I = 1; I <= 1000; I++
・・・・・
FORNEXT C > 15
・・・・・
FOREND A < 100 && B > 1
・・・・・
・・・・・
ROF

FOREND 文は式の内容が成立すれば ROFを抜ける
FORNEXT 文は式の内容が成立すれば ROFに行く(上の例ではI++をする)


例1)変数D1のインデックス1から100に変数Aの値をセットする。

FOR I = 1; I <= 100; I++
D1[I] = A
ROF


例2)変数Iの値が1から1ずつアップして100になるまで処理する。         (100回処理を繰り返す)

FOR I = 1; I <= 100; I++ I > 100 のとき D = A にとぶ
B = C
FOREND B > 100 B > 100 のとき D = A にとぶ
A = B + C
FORNEXT A < 10 A < 10 のとき I に 1 をたして B = C にとぶ
・・・・
ROF
D = A


例3)100回処理を繰り返す 但し変数Bが50以上の時         変数Aに200をセットして終わる

FOR I = 1; I <= 100; I++
・・・・
IF B >= 50
A = 200
FOREND 1 強制的にFOR文を終了する(D = A にとぶ)
FI
A = B + C
・・・・
ROF
D = A

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆GOTO文 ジャンプ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GOTO ラベル名 または GOTO 条件文 ラベル

GOTO ESC_JUMP GOTO I > 1 LAB

条件付きまたは無条件のジャンプ、どちらでも使用可能である。


例1)条件無し

:LAB1
・・・・・
・・・・・
GOTO LAB1 LAB1 にジャンプする


例2)条件付き

・・・・・
GOTO A < 10 LAB1 A < 10 のとき LAB1 にジャンプする
・・・・・
・・・・・
:LAB1
・・・・・
・・・・・

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆BRANCH文 ジャンプ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

BRANCH 変数(JUMP ラベル) エラージャンプ

A$ = "JUMP_1"
BRANCH A$ NON_LABEL

条件無しでジャンプするが、GOTOと違いジャンプ先を変数に入れておく。
逆に、変数か定数の形でないと正常には動作しない。
またGOTOの場合ラベルエラーは即停止としたが、この命令はエラージャンプする。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆GOSUB        サブルーチン実行
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GOSUB ラベル名 または GOSUB 条件文 ラベル

GOSUB SUB1  GOSUB I > 1 SUB

サブルーチンは ラベル名からRETURNまでとする。


例1)条件無し

・・・・・
GOSUB SUB1 SAB1 から RETURN までを実行する
・・・・・ この行に戻る

:SUB1
・・・・・
・・・・・
RETURN


例2)条件付き

・・・・・
GOSUB A < 10 SAB1 A < 10 のとき SAB1 から RETURN
までを実行する
・・・・・ この行に戻る
・・・・・
:SAB1
・・・・・
・・・・・
RETURN

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆サブルーチンの終了
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RETURN

GOSUB *** サブルーチンに入れば、必ず RETURN
で戻ること。

戻らないで、FOR、IF の枠とからむと思わぬ動作をする。
特に、サブルーチンの中では OUT によるリンクはできない。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆実行の一時中断
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

STOP

この命令を実行するには、下記の ONSTOP 命令を実行していないと無効になる。
この命令で処理が一時中断され、画面から変数名を入力するとその値が表示される。
 入力方法>> ? A$ と入力すると現時点でのA$の値を表示する。

リターンキーで処理を続行する。ESCキーで処理を中止する。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆実行の一時中断
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
「STOP」命令と同じ

BREAK

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆STOPキーを有効にする。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

ONSTOP


DOS版ではこの命令を実行していないと、STOP命令、BREAK命令、
STOPキーは効かない。
以後、OUT命令でSSDBが変わってもSTOPキーは有効

WIN32版ではSTOPキーは有効にできない。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆システム日付を取る グリニッジ標準時間である  (9時間前)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
GETTIME 変数(19990612123015) 変数(milisec) 変数(曜日) JAPAN

曜日は0:日 1:月 ・・・・・

グリニッジ時間だが、もし JAPAN が付けば+9時間を中で計算後返す
つまり日本時間を返す

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆システム日付を設定 グリニッジ標準時間である  (9時間前)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
SETTIME 変数(19990612123015) 変数(milisec) JAPAN

グリニッジ時間だが、もし JAPAN が付けば日本時間設定だとみなして
−9時間を中で計算しコンピュータにセットする

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆待ち時間
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
計算式でも可 例:2*60  −−  2分のこと

WAIT 秒
WAIT 120

      この命令の部分で単純に時間待ちをさせる。他の処理はしない。

      WIN32の Sleep() を呼んでいるので、WAIT 0

      も他のプロセスに一時譲るという意味がある。

又は、100Mの様に Mを付けた場合は Mili Sec の意味

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆今のログインユーザ名を知る
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

USERNAM 変数(ユーザ名)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆本プログラムのバージョンを返す
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

VERSION 変数(バージョン内容) 変数(バージョンNO.)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆基本プログラムを終了する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

BASEEND 0/1/2/3

0:普通  1:WINDOWSおわり(電源断) 2:再起動 3:WINDOWSシャットダウンのみ

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆END エラーレベル
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

END 12 例えばこう書くと、終了後バッチファィル中で
IF ERRORLEVEL 12 GOTO THEEND などとできる

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シーケンシャルファィルREADオープン
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SROPEN ID 変数(ファィル名)

SROPEN 1 A$

シーケンシャルファイルを読み込み専用モードでオープンする
ID は任意の番号(1〜255)とし、「INPUT」命令にて使用する

  例1)
FCHECK "TEMP.DAT" R NONJUMP
SROPEN 1 "TEMP.DAT" ---> TEMP.DAT ファィルを読み込みモードでオープン
もしファィルが存在しないとエラーストップする
ので、先に存在チェックをすること
・・・・・・・ ---> ファィルが有る場合の処理
・・・・・・・
:NONJUMP
・・・・・・・ ---> ファィルが無い場合の処理


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シーケンシャルファィルWRITEオープン
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SWOPEN ID 変数(ファィル名)

SWOPEN 1 A$

シーケンシャルファイルを書き込み専用モードでオープンする
ID は任意の番号(1〜255)とし、「PRINT」命令にて使用する

例1)
SWOPEN 1 "TEMP.DAT" ---> TEMP.DAT ファィルを書き込みモードでオープン
ファィルが存在した場合は、以前のデータは
壊される
・・・・・・・

[注意]:処理上、書き込むファイルの名前は、たとえ小文字を指定しても大文字で出来上がることに注意!!。

小文字にする必要がある場合は lower() 関数と rename 命令を使って変更する必要があります。


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シーケンシャルファィルAPPENDオープン
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SAOPEN ID 変数(ファィル名)

SAOPEN 1 A$

シーケンシャルファイルを追加書き込みモードでオープンする
ID は任意の番号(1〜255)とし、「PRINT」命令にて使用する

  例1)
SAOPEN 1 "TEMP.DAT" ---> TEMP.DAT ファィルを追加書き込みモードでオープン
・・・・・・・

[注意]:処理上、書き込むファイルの名前は、たとえ小文字を指定しても大文字で出来上がることに注意!!。

小文字にする必要がある場合は lower() 関数と rename 命令を使って変更する必要があります。


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シーケンシャルファィルREAD
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

INPUT ID 変数 ラベル
INPUT 1 A$ LABEL1 SROPEN で宣言したIDが1の時

ID は任意の番号(1〜255)とし、
「SROPEN」命令で使用した番号と一致させる
EOFの時ラベルへジャンプする

CLIP変数指定もOK
INPUT 1 CLIP LABEL1

例1)
FCHECK "TEMP.DAT" R NONJUMP
SROPEN 1 "TEMP.DAT"
:LOOP
INPUT 1 A$ LABEL ---> A$にテキストデータ1行読み込み
・・・・・・・・ ---> EOFならLABELへジャンプする。
・・・・・・・・ ---> A$のかわりに CLIP とあれば
・・・・・・・・ ---> CLIPエリアにデータが入る。
GOTO LOOP
:LABEL

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シーケンシャルファィルWRITE
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

PRINT ID 変数
PRINT 1 A$ SWOPEN で宣言したIDが1の時

ID は任意の番号(1〜255)とし、オープン時に使用した番号と一致させる

CLIP変数指定もOK
PRINT 1 CLIP

使用例:
SWOPEN 1 "TEMP.DAT"
PRINT 1 A$ ---> A$のテキストデータ1行を書き出し
・・・・・・・・ ---> A$のかわりに CLIP とあれば
・・・・・・・・ ---> CLIPエリアからデータが出される。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルクローズ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CLOSE ID

CLOSE 1 ---> オープン時に指定した数値でもってクローズする

ID は任意の番号(1〜255)とし、オープン時に使用した番号と一致させる

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィル削除
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

KILL 変数(ファィル名) OK
KILL A$
KILL "TEST.DAT"
KILL "TEST.DAT" OK

うしろに「OK」の文字を付ければ、ファィルの有無に関係なく処理を続行する

「OK」なしの場合、もしファィルが無ければエラーメッセージを出して
処理を中止する

存在するファイルをクリアしてサイズ0にしたい場合、
KILL FNAME RESET RESET が付くとサイズ0にする
ということは無いとエラー
KILL FNAME RESET OK なければ何もしない
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファイルリネーム
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RENAME 変数(ファイル名1) 変数(ファイル名2)

RENAME "H:WORK.DAT" "WORK.111"

左のファィル名を右の名前に変更する。
右には、ドライブ・ディレクトリ名は書かないこと。


例1) A$ = "H:WORK.DAT"
B$ = "WORK.111"
RENAME A$ B$

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルが存在するかを調べる
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

FCHECK 変数(ファィル名) 変数(サイズ) ラベル
FCHECK "TEST.DAT" S NONJUMP

無ければ、ラベルへジャンプする
バイトサイズを返してくれ、存在しなければラベルへジャンプする。

例1)
FCHECK "TEST.DAT" S NONJUMP --> TEST.DATファィルが存在
KILL "TEST.DAT" すれば、それを削除したい時
:NONJUMP

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルのコピー
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

タイプ 1 FLCOPY 変数(ファィル) 変数(ファィル) 変数(スタンプファィル)
−−>

タイプ 2 FLCOPY 変数(ファィル) 変数(ファィル) ERROR エラージャンプラベル
−−>

H変数に係わるかどうかはチェックしてくれる

タイプ 1
  元が無ければ、コピー先も無くなる。
  スタンプファィルは、コピーするファィルサイズが大きいときの為に存在し、
  もし、前回の日付・時刻のままであれば、物理的にコピーする必要がないので、
  スピードUPになる。

タイプ 2
  ERROR を書いた場合でも、エラージャンプを書かない場合はある。
  スタンプファィル指定はできないが、例えばリモートアクセス時のコピーなどの時に使用する。
  さらにスタンプチェックをしたいのなら、タイムスタンプ命令で管理せよ。
  ERRORとは、コピーの最中のエラーであることに注意。

例1)
FLCOPY "WORK1.DAT" "WORK2.DAT"

WORK1.DAT をWORK2.DAT にコピーする

例2)
FLCOPY "WORK1.DAT" "WORK2.DAT" "STAMP1.DAT"

WORK1.DAT をWORK2.DAT にコピーする
但し、WORK2.DAT の更新履歴が STAMP1.DAT の情報と等しければコピーしない

例3)
FLCOPY "\\PCSS\WORK1.DAT" "WORK2.DAT" ERROR ER_JUMP

[PCSS]コンピュータの WORK1.DAT を こちらの WORK2.DAT にコピーする
但し、回線エラーなどでエラーになればエラージャンプをする。

[注意]:処理上、書き込むファイルの名前は、たとえ小文字を指定しても大文字で出来上がることに注意!!。

小文字にする必要がある場合は lower() 関数と rename 命令を使って変更する必要があります。


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルの移動
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

タイプ 1 FLMOVE 変数(ファィル) 変数(ファィル)
−−>

タイプ 2 FLMOVE 変数(ファィル) 変数(ファィル) ERROR エラージャンプラベル
−−>

H変数に係わるかどうかはチェックしてくれる
元のファィルは無くなる 移動先のファィルは消しておくこと

タイプ 2 の場合、エラーストップしないでジャンプする
リモートアクセスなどで便利である。

[注意]:処理上、書き込むファイルの名前は、たとえ小文字を指定しても大文字で出来上がることに注意!!。

小文字にする必要がある場合は lower() 関数と rename 命令を使って変更する必要があります。


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルのバイナリー比較
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

BFLCOMP 変数(ファィル1) 変数(ファィル2) 変数(結果)

比較結果
 1:両方のファィルが存在し、サイズも内容も一致する
 0:  上以外のすべての状態
SSDB21Nの場合、どちらも存在してサイズ0なら 一致とした

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ディレクトリを操作する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIRMNT 1/2/3/4 変数(ディレクトリ名) ERRORJUMP

1 : カレント DIR 変更
2 : カレント DIR を調べる(変数に入る)
3 : DIR 作成
4 : DIR削除


例1) DIRMNT 1 "TEMP" カレントをTEMP ディレクトリに変更する
例2) DIRMNT 2 A$ カレントディレクトリが A$ に入る
例3) DIRMNT 3 "TEMP" TEMP ディレクトリを作る
例4) DIRMNT 4 "TEMP" TEMP ディレクトリを削除する
例5) DIRMNT 5 "AAAA" "BBBB" AAAA フォルダを BBBB に変更する
 DIRMNT 5 "^CCCC" CCCC の 中は AAAA と BBBB の2行
先頭に ^ がつけば指示ファイルということ

1 : 変更 2: 調べ では CLIP も書くことができる。(SSDB21N.EXEのみ)

1 : 変更 のみエラーならジャンプができる

5 では AAAA BBBB はフルパスでも相対でもどちらでもよい。CLIPは使えないので、長いパスなら ^指定でやる。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆どんなファィルがあるかを指定ファィルに吐き出す
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

?FILNAM 変数(チェックファィル/ディレクトリ名) 変数(結果ファィル名) 変数(件数)

先頭に @ あるいは / が付いたらそれ以降の名前のディレクトリを探すという意味にとる

結果はソート(大文字・小文字区別する)され、シーケンシャルファイルに出力される


SSDB21N では 大文字/小文字区別していたのをすべて大文字にするために、
件数の後ろに何か付ければ全て大文字とするようにし、

付けなければ大文字/小文字を区別するようにしてある。

SSDB21N では ファィル名はシステムの最大文字まで取れる。

読み出し時は変数のサイズに注意。CLIPを使うべし。

例1) カレントの全ディレクトリを TEMP.DATにソートして並べる
件数は A へ

?FILNAM "@*" "TEMP.DAT" A

--> WORK1 TEST1 TEST2 の3つのディレクトリがカレントにある時
TEMP.DAT には TEST1 TEST2 WORK1 の3件が
出力され、A には 3 がはいる

SROPEN 1 "TEMP.DAT"
INPUT 1 A$ A$ には TEST1 がはいる
INPUT 1 A$ A$ には TEST2 がはいる
INPUT 1 A$ A$ には WORK1 がはいる
CLOSE 1


例2) カレントの頭にWORKの付くファイルを TEMP.DATに
ソートして並べる。 件数は A へ
?FILNAM "WORK*" "TEMP.DAT" A

--> WORK1.DAT WORK2.DAT WORK1.BAK の3つのファイルが
カレントにある時
TEMP.DAT には WORK1.BAK WORK1.DAT WORK2.DAT
の3件が出力され、A には 3 がはいる

SROPEN 1 "TEMP.DAT"
FOR I = 1; I <= A; I++ A は 3 なので FOR 文は3回処理する
INPUT 1 A$
・・・・・
ROF
CLOSE 1

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルへのレコード削除/挿入をする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

FRECMNT 変数(ファィル名) 1/2 変数(1レコードサイズ) 変数(FROM) 変数(TO)

1:削除 FROM TO は 1 以上の数
ファィルの指定されたレコードを削除して前に詰め、サイズも減らす

2:挿入 FROM の前に TO 個
ファィルの指定された位置にNULLレコードを挿入する
最後に追加ならMAX+1を指定

H変数で定義しているファイルは処理できない
(あらかじめH変数から切り放しておく必要がある)


例1)TEMP.DAT(128BYTE/REC)の10レコード目から
20レコード目までを削除する
FRECMNT "TEMP.DAT" 1 128 10 20


例2)TEMP.DAT(128BYTE/REC)の100レコード目の前に
3レコード追加する
H01[・・・・・][TEMP.DAT]
・・・・・
・・・・・
HFCHG H01 "WORK.DAT" --> TEMP.DATをH変数から切り放す
FRECMNT "TEMP.DAT" 2 128 100 3
HFCHG H01 "TEMP.DAT" --> TEMP.DATを再びH変数に割り当てる
H01[100][1] = "AAAAA" --> 追加レコードにデータを編集
H01[101][1] = "BBBBB" --> 追加レコードにデータを編集
H01[102][1] = "CCCCC" --> 追加レコードにデータを編集

DIET命令中とかシーケンシャルファィルでなく、H変数として使用中の場合、
自動的にCLOSEして実行を続ける。
また、ファィル名に @H12 のように先頭に @H とつけるとそのH変数の1レコードサイズを使う

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルの最後に書き込まれたタイムスタンプをとる
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

FLSTAMP 変数(ファィル名) 変数(HIGH) 変数(LOW) 変数(yymmdd) 変数(hhmmss) 変数(サイズ)
後の2つは無くても良いが、ファィル作成の日本時間を示す

また、最後のサイズも無くて良いが、あればファィルサイズを示す

FCHECK に比べ、排他オープンをしていないのと、サイズが High Long OK な点が違う。(SSDB21N.EXE のみ)

例1: FLSTAMP CLIP A B C$ D$ SIZ$ C$ D$ SIZ$ は無くてもエラーではない

SSDB21N.EXE では CLIP を可としたため、ファィル名長がMAXまで使える。

という意味では128長までしかダメな FCHECK より使い良いかもしれない。

例2: FLSTAMP "TEST.DAT" A B C$ D$ SIZ$ C$ D$ SIZ$ は無くてもエラーではない

ファィルが無ければ A = -1 B = -1 C$ = "-1" D$ = "-1"

HIGH LOW の意味 1601 年 1月 1日 を起点とする 100 n sec の総カウント秒数(書き込み時間)
ただし、グリニッジ時間のままである。これはタイムスタンプの変化を調べるのにしか使えない。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆H変数ファィルの一部レコードを読み書きする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

FGETPUT 変数(ファィル名) ->|<- H** 変数(スタートレコード) 変数(レコード数)

FGETPUT "TEST.DAT" -> H10 10 2 H10[10],H10[11] にコピー
FGETPUT "TEST.DAT" <- H10 10 2 H10[10],H10[11] からコピー

レコード数は省略すれば、1である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルの一部フィールドを読み書きする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

ELGETPUT 変数(ファィル名) 変数(レコードNO.) 変数(レコードサイズ) 変数(相対位置) 変数(フィールドサイズ) GET/PUT 変数(CLIP可能)

     (レコードNO.)(レコードサイズ)(相対位置)(フィールドサイズ) はすべて 1 から

     書き込みでの追加は次のレコードを越えての書き込みはエラー

   データは文字列しか扱わないが、空いた部分はスペースではなくNULLが入る
ELGETPUT "TEST.DAT" 3 128 10 16 GET A$ A$ に取り出す
ELGETPUT "TEST.DAT" 3 128 10 16 PUT CLIP CLIP を書き出す

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆2つのファイルとレコードサイズを指定して、1レコード移動をする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RECMOVE 変数(レコードサイズ) 変数(コピー元ファィル名) 変数(レコードNO.) 変数(コピー先ファィル名) 変数(レコードNO.) 変数(比較結果)

     (レコードNO.) は 1 から

RECMOVE 128 "FROMFILE.DAT" 3 "TOFILE.DAT" 2
FROMFILE.DAT のレコード3を TOFILE.DAT のレコード2へ

もし 変数(比較結果) があれば、MOVEはしないで比較するだけ    =1:一致

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルのマージをする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

MERGE 変数(ファィル1) 変数(ファィル2)

   ファィル1のうしろに、ファィル2を付加する

   ファィル1はサイズが大きくなり、ファィル2は変わらず

[注意]:処理上、書き込むファイルの名前は、たとえ小文字を指定しても大文字で出来上がることに注意!!。

小文字にする必要がある場合は lower() 関数と rename 命令を使って変更する必要があります。


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆H変数ファィルのキーを吐き出す
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

KEYOUT H** 変数(フィールドno.) 変数(OUT ファィル名) 変数(フィールドサイズ) ヌル - 3

H変数の指定フィールドデータを指定ファィルに吐き出す。

フィールドサイズを指定するのは元のデータサイズを変更可能なようにしてある
指定フィールドサイズの方が大きい場合は、文字タイプなら空白を、数値なら0を加える。
[漢字のみタイプでも半角スペースを加えるので 注意]

キーファィルとしての役目をさせるのだが、もし最後に1が付けば、先頭にポインタ(LONG)

を置くタイプだとして、4バイトレコードサイズが増える。(指定サイズは増やす必要なし)

1でなく2,3を置くタイプもあり。下の例を参照

使用例 1:
VAL H10[SYOHIN]
VAL H50[]["NAME.INX"]
VAL V15 = 5 'ANK エリア だとして
KEYOUT H10 V15 "NAME.INX" 16
NAME.INX には 半角16文字が並ぶ

使用例 2:
VAL H10[SYOHIN]
VAL H50[]["NAME.INX"]
VAL V15 = 5 'ANK エリア だとして
KEYOUT H10 V15 "NAME.INX" 16 1
NAME.INX は 1レコードサイズが20バイトとなる

使用例 3:(SSDB21N.EXE,WEB_SDB".EXEのみの追加)
VAL H10[SYOHIN]
VAL V15 = 5 'ANK エリア だとして
KEYOUT H10 V15 "NAME.INX" 10 2
NAME.INX は フィールド5のなかで、左から10バイトのみを吐き出すが、
違うレコードのものばかりを出す(ソートしていない)
excelでいうオートフィルタに相当する

使用例 4:(SSDB21N.EXE,WEB_SDB".EXEのみの追加)
VAL H10[SYOHIN]
VAL V15 = 5 'ANK エリア だとして
KEYOUT H10 V15 "NAME.INX" 10 3
使用例3と同様だが、使用例1と2の関係のように、
先頭に、最初に現れたレコードのNO.(0−−)を付ける。
(だから1レコード14バイト)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆一時ファィルを作成する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GETTMP 変数(ディレクトリ) 変数(先頭文字) 変数(確保した一時ファィル名)


結果の名前は DD\HH****.TMP のように必ず TMP が付く
ディレクトリ は 普通は . を指定するとカレントにできる。 DD
もしヌル指定なら、得られるファィル名は HH*****.TMP となる。
先頭文字は必ず先頭に付けられる 0 とか PP とか HH
確保したファィルは0サイズで作られるのであらためてオープンすること
削除を忘れたら残る
エラーは満杯以外有り得ないが、その時はシステムタイムを使うので、ファィル名にヌルは無い

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆READONLY
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

READONLY 以後のH変数OPENはREADモードとなる

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆NORMALAC
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

NORMALAC 以後のH変数OPENはREAD/WRITEモードとなる

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆HAITA 排他処理
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

HAITA 変数(ファィル名) 変数(ユーザNO.) ラベル(ファィル存在する「使用中」)

指定ファィルを作成することで、以後の占有を宣言する
そのファィルにはユーザーNO.を書き込む
もしファィルが存在し、占有不可ならその旨をメッセージし、
ラベルへジャンプする
ファィルの消去(占有の解放)は KILL で行う

通常は同一ユーザには再度占有を許しているが、全くの排他にしたければ、
ユーザNO.の前に − を付ける。(SSDB21,WEB_SSDB.EXE のみ)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆クリップ変数宣言
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

これは、WINDOWSでいうクリップボードではないことに注意。

CLIP 変数

変数はサイズであり、バイトカウント
CLIP 1024 --> 1024バイトのデータの受け皿となる

SSDBシステムでは文字列の最大サイズが128バイト以下という制限が有る。
そこで、それ以上の文字列や種々のデータなどを操作できる受け皿として、
CLIP変数が準備されている。
(これへの読み書きについては別途命令が存在する。)
たとえば、1レコード長の大きいシーケンシャルファィルを扱う場合や、
クリップファィルへの読み書きに利用する。

最大 32000

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆CLIP変数を , で区切る
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIVID M型配列変数名 変数(最大数) (区切り種別)


CLIPの文字列を ,を区切りとして1要素ずつM型変数に順次いれる
INTEG 命令の逆である
最後に S をつけると ,でなく、スペースで区切る
S が TAB という3文字なら タブで区切る

DIVID M10 10 または DIVID M10 10 S または DIVID M10 10 TAB

1レコードのサイズが大きくても、CLIPの宣言次第でどうにでもなる。
ところが、M変数の1要素は最大128文字までである。そこで以下の決まりにする。
(1)1要素が128文字以内(128ジャストも含む)なら、そのまま保存する。
(2)1要素が129文字以上になる場合は、まず127文字(全角かどうかをみるので126かもしれない)
   をセットして、128バイト目(同様に127バイト目かもしれない)に、区切りコードがセットされる。
プログラムでは、stlen() が127以上なら右端1バイトを取って、それが区切り文字(指定したもの)かどうか
をみて、そうなら次のインデックスのデータが繋がっているとみなさなければならない。

例1)
VAL M10[10]
CLIP 1024 ---> CLIP 宣言
SROPEN 1 "TEMP.DAT" ---> TEMP.DAT シーケンシャルファィル READ オープン
:LOOP
INPUT 1 CLIP EOF_END ---> CLIPに読み込む
DIVID M10 10 ---> 読み込んだ文字列を , を区切りとして
・・・・・・・ 分解し、M10に保存する
・・・・・・・ たとえば文字列が aaa,22,3333 だとすると
・・・・・・・ DIVID した結果として、M10[1] = "aaa" ,
GOTO LOOP M10[2] = "22" , M10[3] = "3333" となる
:EOF_END
CLOSE 1

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ ,をはさんでCLIP変数に
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

INTEG M型配列変数名 変数(最大数)


M型変数の文字列を ,で連結してCLIPへセットする
DIVID 命令の逆である
最後に S をつけると ,でなく、スペースで連結する
S が TAB なら タブで連結する
S が NUL なら 何も挿入しないで連結する

INTEG M10 10 または INTEG M10 10 S または INTEG M10 10 TAB

例1)
VAL M10[10]
CLIP 1024 ---> CLIP 宣言
SWOPEN 1 "TEMP.DAT" ---> TEMP.DAT シーケンシャルファィル WRITE オープン
FOR I = 1; I < 100; I++
・・・・・・・ ---> M01にデータをセットする
・・・・・・・ たとえば M01[1] = "アアアア" , M01[2] = "イイイイ"
・・・・・・・ M01[3] = "ウウウウウ" とする
INTEG M10 10 ---> CLIP にデータを合成する
PRINT 1 CLIP ---> CLIP = "アアアア,イイイイ,ウウウウウ" を書き出す
ROF
CLOSE 1

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数をクリップファィルに出力
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
変数がヌル("")ならファィルクローズ

OUTCLIP 変数
OUTCLIP A$ OUTCLIP CLIP OUTCLIP ""

ファィル名はカレントドライブ・カレントディレクトリの
「 $$CLIP$$.$$$ 」 である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆クリップファィルより変数に入力
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
変数がヌル("")ならファィルクローズ

INCLIP 変数 ラベル 入力不可の時はラベルへジャンプする。
INCLIP A$ aa INCLIP CLIP aa INCLIP ""

ファィル名はカレントドライブ・カレントディレクトリの
「 $$CLIP$$.$$$ 」 である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆クリップ変数へのアクセス
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
CLPSET 変数(どこから) 変数(何バイト) D** TORU/OKU

TORU : CLIP のどこから何バイトをD**に1バイトずつ取る
OKU : CLIP のどこから何バイトにD**の1バイトずつ置く

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆各種メディアの出力または、SDBのリンク
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

種類 0:SMMO  1:SSDB  WAV/BMP/AVI

・SMMOの時
   [OUT "test.mmo" 0 A$ X Y]
X,Y は相対位置 (無くてもいい)
または [OUT "@testall.mmo" 0]
  SMMOファィルをまとめて指定しておく場合は@ファィル名を指定する
すると次から、ファィル名を指定した時は、テーブル上にあるなら即出力
してくれる
入力データありなら、変数に入れてくれる
例え最初の出力であっても、色はデフォルトに設定し直さない。
つまり、前回SSDBが走った時のままである。
「初期化」コマンドが入っていれば初期化される。

・SSDBの時   [OUT M5 1 5]
アーギュメントをM**に並べて置く
 (1) プログラム名
 (2) MAXファィルOPEN数
(3) =D:デバッグモード =T:トレースモード =N:なし
(4) ここよりアーギュメント

制限として、「GOSUBの中からは移れない」


WAVの時   OUT FILE(**.WAV)名 WAV 1/2/3
1:同期 2:非同期 3:非同期繰り返し
同期とは、音の出力が終わってから戻るが、非同期ならプログラムに、
すぐ戻る。(プログラムを終了させれば、途中であっても音が消える)
繰り返しなら "" または存在しないファィル名で3タイプを呼ぶまで、繰り返す
BMPの時   OUT FILE(**.BMP)名 BMP 1/2 entry x1 y1 x2 y2
1:登録 2:削除(消去)
   座標値はプリンタ/画面それぞれ用の座標の取り方で指定する。
   ENTRYは、画像をスクロールさせたり、疑似動画にしたりするのに利用する。
   通常、1画像を表示しては消去し、ならENTRY=1でよい。
AVIの時   OUT FILE(**.AVI)名 AVI 1/2/3/4
    1:open 2:play 3:stop 4:close
   AVIのウィンドゥはマウスで終了させる。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆文字画面のオールクリア
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CLS

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆画面への左詰め表示
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DISPL 変数(x) 変数(y) 変数(属性) 変数(枠幅) 変数(表示文字列)


属性の指定値 :

(ノーマル) 0xE1 -- 白 0xC1 -- 黄 0xA1 -- 水色
0x81 -- 緑 0x61 -- 紫 0x41 -- 赤
0x21 -- 青 0x01 -- 黒
(ブリンク) 0xE3 -- 白 0xC3 -- 黄 0xA3 -- 水色
0x83 -- 緑 0x63 -- 紫 0x43 -- 赤
0x23 -- 青 0x03 -- 黒
(リバース) 0xE5 -- 白 0xC5 -- 黄 0xA5 -- 水色
0x85 -- 緑 0x65 -- 紫 0x45 -- 赤
0x25 -- 青 0x05 -- 黒
(ブリンク・リバース) 0xE7 -- 白 0xC7 -- 黄 0xA7 -- 水色
0x87 -- 緑 0x67 -- 紫 0x47 -- 赤
0x27 -- 青 0x07 -- 黒


例1)画面10行目の左30バイト目から黄色ブリンクで
”タイトル”と表示する

DISPL 30 10 0xC3 15 "タイトル"

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆画面への右詰め表示
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DISPR 変数(x) 変数(y) 変数(属性) 変数(枠幅) 変数(表示文字列)
DISPR 10 10 0xe1 15 A$

DISPL と同様

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆書式付き変数表示
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DISPF 変数(x) 変数(y) "________" 変数 変数 変数 ・・・・


"________" に書けるもの

固定文字列

属性(0x**)初期値は 0xE1

変数表示枠(変数は10個まで)
||||||| : 枠内右詰め
^^^^^^^ : 枠内左詰め
~~~~~~~ : そのまま表示


例1)10行目左20バイト目から
「合計 = 1234  データ = 85」
と表示する 但し、変数は黄色・リバースで表示する

A = 1234
B = 85
DISPF 10 20 "合計 = 0xc5|||| 0xe1 データ = 0xc5||||0xe1 " A B

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆画面文字出力
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

PRINTF 変数(文字列) 変数(y)


 フォーマットなし  そのまま画面へ
yが CR ならキャリッジリターン
なければ位置設定なし(前回PRINTFの次の行に表示)

PRINTF "SYSTEM" CR しない
PRINTF "SYSTEM" 15 Y = 15 ライン に表示
PRINTF "" CR CR ノミ
PRINTF A$ CR A$ を表示し、CR

[追加]
PRINTF "__" ON LABEL 表示する Yライン が 21 または 22
なら
「どれかのキーを押して下さい(中止:ESC)」を表示し、
ESCを押すと、 LABEL にジャンプする

PRINTF "__" END 表示する Yライン に係わらず
「以上です。どれかのキーを押して下さい」を表示する。

「ON」「END」 ともにキーIN後は 画面消去をすることに注意 !!!


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆文字画面領域を保存する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CTORI

      文字領域を、退避する。

 現在沢山の文字が表示されているとして、一時何かを文字表示し、確認後すぐに
 元の沢山の文字表示に戻したい、という場合、これで退避しておいて、
 次の CMODOSI で画面を戻す。

  ** WIN32版 SSDB では、DOSイメージどおり、文字描画領域と
     グラフィックス描画領域とは別物である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆文字画面領域を戻す
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CMODOSI

      文字領域を CTORI 実行時に戻す。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆キャラクタエリアの上下スクロール
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SCROLL 1/0 x1 y1 x2 y2

1 : 下へ 0 : 上へ

x1,y1 : 左上座標
x2,y2 : 右上座標

1行ずつスクロールする


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆メニューを表示して、選択された位置を知る
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

MENUDSP 変数(タイトル) M**/変数(ファィル名) 変数(行数) 変数(結果)

M変数か、シーケンシャルファィルにメニュー項目をセットし、
その行数分の表示をし、リターンキーで選択させる

タイトルもメニュー項目も、先頭に半角の1−7があれば
色番号を示すとみなす。無い場合は白とする。

10行以内の場合は2行置きに表示される。

    ESCキーなら、リターン値は 0
    選択値は 1,2,3,・・・

    1分のタイマーで、スクリーンセーバーがはたらく

もし他のプログラムが共有メモリに "KINKYU" = ???????????? とセットすれば、
  その ?????????????? 文字列を画面の最上段に赤色表示する

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィック画面のオールクリア
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GCLS

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆全画面のオールクリア
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

ALLCLS

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィック一部クリア
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GWCLS 変数(Y1) 変数(Y2)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィック画面領域を保存する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GTORI

 現在沢山のグラフィックが表示されているとして、一時何かを表示し、
 確認後すぐに元の沢山のグラフィック表示に戻したい、という場合、
 これで退避しておいて、次の GMODOSI で画面を戻す。

  ** WIN32版 SSDB では、DOSイメージどおり、文字描画領域と
     グラフィックス描画領域とは別物である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィック画面領域を戻す
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GMODOSI

      グラフィック領域を GTORI 実行時に戻す。

◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
◇ここで、WIN32版SSDBのグラフィックについて

◇ グラフィックと称するものに、3種類有る。
◇  1:画面  2:プリンタ 3:メモリ
◇ このうち、「画面」に対しては、以下で云う座標値はすべて、8000を100%
◇ とした値で指示する。
◇ 例えば、四角形の左上のX位置を画面の中央にするなら、4000となる。

◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィックメモリのBITBLTをする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

BITBLT 変数(x) 変数(y) 変数(wx) 変数(wy) 変数(bx) 変数(by)

画面の(x,y)から幅(wx,wy) へ メモリの(bx,by) から転送

 ここでいうすべての値は WIN32 API の BitBlt()命令の
 パラメータそのままである。(WIN32 API参照)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィックメモリのスクロールをする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SCROLDC 0/1 変数(x1) 変数(y1) 変数(x2) 変数(y2) 変数(dx) 変数(dy)

0:画面 1:メモリ (x1,y1)-(x2,y2) をスクロール転送

 ここでいうすべての値は WIN32 API の ScrollDC()命令の
 パラメータそのままである。(WIN32 API参照)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィック/メモリ/プリンタへの出力切り替え
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GOUTDV 0/1/3

  0:画面 1:プリンタ 2:メモリ

 この命令以降のグラフィック命令が3種の何に対して実行されるのかを切り替える。

 内部処理でいえば、「プリンタへ」とした時にプリンタの初期処理を、「画面へ」と
 した時に、プリンタの後処理を実行していることを念頭に置くこと。

 プリンタへとした時の追加指令
GOUTDV 1 0/1/2 180 60
最初の 0/1/2 は、 0:用紙内 1:実寸 2:スルーアウト
の意味、用紙内とは現在の指定の紙(縦でも横でも)に必ず入ることになる。
その為には、続く180,60(デフォルト)のように、半角で横180文字
縦60行が最大だ、と指定しておく。数値は1以上なら任意である。
少なくすると、大きな文字が描けるという理屈である。
実寸は、実際のインチどおりとなり、指定伝票の印刷に使う。
スルーアウトとは、プリンタにデータを直接出すもの、ただしこれは
PR201系統のプリンタしか意味がない。
デフォルト(GOUTDV 1 だけなら)は「用紙内」印刷となる。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィックのベース相対位置を指定(プリンタも可能)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GBASE 変数(x相対) 変数(y相対) 0/1 変数(x分母) 変数(y分母)

0/1 : == 0:画面に対して   「相対」のみ意味有り
                 以後の描画命令で位置に加算される。
              画面に対する描画命令では、まずこの値を加算して、
              そのあとで、MAX8000との比というかたちで、
              ピクセル位置を計算する。

== 1:プリンタに対して
                 以後の描画命令で位置に加算される。
              但し、ここで指定する「相対位置」は、指定プリンタの
              幅に対して、「nnn/1000」のnnnをいうこと
              さらに、「分母」を指定すれば、デフォルトの8000
              を変更する事が出来る。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆直線
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
線種 ヌル OR 0 : 実線 1 : 破線 2 : 点線
3 : 1点鎖線 4 : 2点鎖線 5 : 3点鎖線

LINE x1 y1 x2 y2 色(0 -- 15) 線種(ヌル カ 0 -- 5)

LINE 10 10 20 20 5 2

線種 ヌル OR 0 : 実線 1 : 破線 2 : 点線 3 : 1点鎖線
4 : 2点鎖線 5 : 3点鎖線

  画面に対し、またプリンタもデフォルトでは、8000に対する割合を示せばよい

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆四角形
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
パターン 0 : 枠のみ 1 : べた塗り 2 - 37 : 9種4ブロック

RECT x1 y1 x2 y2 色(0 -- 15) 線種 パターン

RECT 10 10 20 20 5 0 1
線種 ヌル OR 0 : 実線 1 : 破線 2 : 点線 3 : 1点鎖線
4 : 2点鎖線 5 : 3点鎖線
パターン 0 : 枠のみ 1 : べた塗り 2 - 7
100 : 枠のみ 101 : べた塗り 102 - 107 丸い四角

  画面に対し、またプリンタもデフォルトでは、8000に対する割合を示せばよい

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆円
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CIRL 円種 x1 y1 x2 y2 x3 y3 x4 y4 色 線種 パターン

円種 = 0 : 円 = 1 : 円弧 = 2 : 扇形
(x1,y1)−(x2,y2)で囲まれるエリア
開始点x3 y3  終了点x4 y4
パターン 0 : 枠のみ 1 : べた塗り 2 - 37 : 9種4ブロック
線種 ヌル OR 0 : 実線 1 : 破線 2 : 点線 3 : 1点鎖線
4 : 2点鎖線 5 : 3点鎖線

  画面に対し、またプリンタもデフォルトでは、8000に対する割合を示せばよい

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆多角形
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

POLYGON D** 変数(点数)色 線種 パターン

パターン 0 : 枠のみ 1 : べた塗り 2 - 37 : 9種4ブロック
線種 ヌル OR 0 : 実線 1 : 破線 2 : 点線 3 : 1点鎖線
4 : 2点鎖線 5 : 3点鎖線

  画面に対し、またプリンタもデフォルトでは、8000に対する割合を示せばよい

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィック文字を縦に描画する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

TMOJI x y sx sy 間隔 色 変数(文字列)
TMOJI 100 100 24 24 3 5 "TESTモード"

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆グラフィック文字を横に描画する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

YMOJI x y sx sy 間隔 色 変数(文字列)
YMOJI 100 100 24 24 3 5 "TESTモード"

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆キーボード文字列入力
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

IN 変数(x) 変数(y) 変数(色) 変数(サイズ) 案内文字列 変数(入力結果)
タイムアウト 1/0 ヌル/1/2

結果は「¥ヌルならタイムアウト」 「¥nnは特殊キー入力」
特殊キー入力後はCASEまたはIF文で判定すること
タイムアウト=0なら永久ループ

例: IN 10 10 5 15 "ファィル名は?" A$ 60 0 1

1/0は 1ならFEP を自動起動する指示である。
ヌル/1/2は 1なら変数データを表示し、カーソル先頭
        2なら変数データを表示し、カーソル最後尾
        ヌルか0なら、最初空白からはじまる。

注:先頭に¥がきてはダメ
入力後の判定として、 IF A$ {} "\" とすると、漢字の後ろ半分にひっかかる
可能性有り、注意
タイムアウト=0なら永久ループになるが、この時COPYキーは、
リターン後に有効となる。
これは、LOOP/POOL命令でも同様である。
但し、このことはWINDOWS版には当てはまらない。

タイムアウトの秒数が100000以上の場合は、100000を差し引いた秒数の
パスワード入力という意味となる。つまり、文字をエコーしない入力である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆1キー入力
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 結果は「¥ヌルならタイムアウト」 「¥nnは特殊キー入力」
特殊キー入力後はCASEまたはIF文で判定すること
タイムアウト=0なら永久ループ
タイムアウトが負ならキーチェックのみしてすぐ戻る

GETK 変数(x) 変数(y) 変数(色) 案内文字列 変数(入力結果) タイムアウト

例: GETK 10 10 5 "どれかのキーを" A$ 60
GETK 10 10 5 "" A$ 0

:LOOP
GETK 10 10 5 "" A$ -1
GOTO A$ == "\" LOOP

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆CASE文       キー入力後の判定文
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

INとGETK の後で文字を比較して該当すればジャンプ
CASE文でキーを比較する時に使えるシステム変数
"ESC" , /* ESC キー */ "F1" , /* F・1キー */
"F2" , /* F・2キー */ "F3" , /* F・3キー */
"F4" , /* F・4キー */ "F5" , /* F・5キー */
"F6" , /* F・6キー */ "F7" , /* F・7キー */
"F8" , /* F・8キー */ "F9" , /* F・9キー */
"F10" , /* F・10キー */ "TAB" , /* TABキー */
"BS" , /* BSキー */ "RU" , /* ROLL UPキー */
"RD" , /* ROLL DOWNキー */ "HOME", /* HOMEキー */
"INS" , /* INS キー */ "DEL" , /* DEL キー */
"ウエ" , /* ウエ キー */ "シタ" , /* シタ キー */
"<-" , /* <- キー */ "->" , /* -> キー */
"HELP", /* HELP キー */ "XFER", /* XFER キー */
"NFER", /* NFER キー */

GETKにおいては リターンキーは 13

「¥ヌルならタイムアウト」
CASE 変数 変数 ラベル
CASE A$ ESC ESC_RET

INとGETKで反応し、返す値 IF文などで直接使用できる

IN        GETK

"ESC" ¥0         ¥0
"F1" ¥1  ¥1
"F2" ¥2  ¥2
"F3" ¥3  ¥3
"F4" ¥4   ¥4
"F5" ¥5  ¥5
"F6" ¥6  ¥6
"F7" ¥7  ¥7
"F8" ¥8   ¥8
"F9" ¥9  ¥9
"F10" ¥10 ¥10
"TAB" ¥11 ¥11
"BS"  −  ¥12
"RU" ¥13 ¥13
"RD" ¥14 ¥14
"HOME"  −  ¥15
"INS"  −  ¥16
"DEL"  −  ¥17
"ウエ" ¥18 ¥18
"シタ" ¥19 ¥19
"<-" ¥20 ¥20
"->" ¥21 ¥21
"HELP" ¥22  ¥22
"XFER"  −  ¥23
"NFER"  −  ¥24

  例えば、IF A$ != ”¥20”  とか

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆INKEYC
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

INKEYC 変数

シフトキーやコントロールキーの押下状態を返す

1 or 0 : SHIFT
10 or 0 : CAPS
100 or 0 : カナ
1000 or 0 : GRPH
10000 or 0 : CTRL

この命令は、キーをとりたい時に使う

  他のプログラムにコントロールを移したい時にCALLしても良いが、

  その目的なら WAIT 0 の方がよい

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆マウスの位置を知る
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

(タイプ1)
MOUSLOC 変数(X) 変数(Y) 変数(LEFT 0/1) 変数(MAX_X) 変数(MAX_Y)

現在のマウスの位置を X、Yに返す かつ 左ボタンはON(1)か
OFF(0)かも返す

画面の比率で利用したいときの為に、クライアントエリアの縦横ドットMAX
も返しているので、必要なら使う。

(タイプ2)
MOUSLOC 変数(X) 変数(Y) SET 変数(MAX_X) 変数(MAX_Y)

現在のマウスの位置を X、Yにセットする。

もし、x,yの値が不正なら MAX_X,MAX_Y にセットされる。ただし、

他への影響からウィンドゥが表示され、フゥアグラウンドの時のみ実行する。

尚、マウスカーソルは表示中でも非表示中でもかまわない

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆マウスの表示/非表示
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

MOUONOF 0/1

0 = MOUSE CURSOR OFF 1 = ON

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ 電卓の窓を開いて計算できる
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DENTAK 変数(最後の演算結果を入れる)(なくてもいい)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆コードセルイニシャライズ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CODINI 変数(ファィル名) ABC 変数(レコードサイズ) 変数(レコードMAX) タイトル
変数(フィールドの相対 1〜) 変数(フィールドサイズ) 変数(エントリーNO.)

ABC の説明 それぞれ1か0しかとれない
A : = 1 : シーケンシャル(CR-LFあり) 0 : ランダム(CR-LFなし)
B : = 1 : 事前にソートしておく 0 : しておかない
C : = 1 : 終了時セーブする 0 : セーブしない(編集不能)

コードセルの中でエラーで落ちたとき
  エラーコード
    1 : コードセル開きすぎ 2 or 3 or 5 or 13 : mallocエラー
7 : codselでcodiniまだだ
8 : codselでエントリーNO.おかしい
9 : codendでcodiniまだだ
10 : codendでエントリーNO.おかしい
11 : codgetでcodiniまだまたはエントリーNO.おかしい

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆コードセル
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CODSEL 変数(エントリNO.) 変数(左上 X) 変数(Y) 1/0 変数(結果) 変数(選択データ)
更に 初期位置 (0,1,2,3・・・・・・)があれば、表示時のカーソル位置とす
エントリーNO.:イニシャル時のNO.
1/0 : 1 ナラ FEP ON 0 : FEP OFF (但し、編集時のみ)
結果は、1−−なら選択NO.
特殊キーは -1 : [↑]キー -2:[↓]キー -3:[←]キー -4:[→]キー
-5:[ESC]or[TAB]
最後に、選択データそのものも、返す
初期位置のデフォルトは[前回選択位置]である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆コードセルエンド
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CODEND 変数(エントリーNO.)

エントリーNO.とはイニシャライズ時とったNO.
−1なら全てをEND

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆仮想ファィルデータの取得
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
レコード番号(1から)をもとにあるファィルの1フィールドを取り出す

CODOPN 変数(ファィル) 変数(レコードサイズ) 変数(相対位置)
ツヅク 変数(サイズ) 変数(得られるID 1 - 8)

相対位置は1から数える
このファィルのデータを得るには、関数( C_GET() )を使う
引き数は ID , レコード(1から)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆コードセル データ獲得
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CODGET 変数(エントリーNO.) 変数(コードエントリーNO.) 変数(データ)

エントリーNO.とはイニシャライズ時とったNO.
コードエントリー(1 −−)を指定して、データを受け取る

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆仮想ファィルクローズ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CODCLS 変数(得られたID 1- 8 )

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆内部で DIETの表を開く
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIET DEF名 DAT名 INX名 MAXREC SPACE M1*変数 C**変数 M2*変数
ツヅキ 先頭ダミーバイト 最後ダミーバイト(後ろ2つは無ければ0)

MAXREC : 最大レコード 注意!!  最大 32767 レコード
SPACE : 画面上を何行あけるか(偶数のみ)

M1* : 設定ファンクションの羅列
C** : ループからもどった時のファンクションキー
アプリの方で文字列比較をすること
「入力後」「func後」C**を変更しても良い
例えば「終了」後、データチェックをしてダメならC**を””とすると、
「終了」とならない。

M2* : [1] データエントリー時のNEWデータ
: [2] データエントリー時のOLDデータ
: [3] NEWレコード
: [4] OLDレコード
: [5] NEWフィールド           */
: [6] OLDフィールド
: [7] [BEFORE 処理ラベル] [START 処理ラベル]
: [8] [ENTRY 処理ラベル]
: [9] [FUNCTION 処理ラベル] [BYEBYE 処理ラベル]
:[10] 漢字FEPの自動起動をするか 0=しない 1=する(デフォルト)
:[11] 閲覧専用 モード S_readonly = 1; 0;(入力)(デフォルト)
:[12] 表の横幅が小さい場合、画面中央表示用げた n 0;(左詰)(デフォルト)
:[13] リターンキーを押したら、下へ移動する = 1; 0;(右横)(デフォルト)
:[14] 罫線の色を指定する = 0xa1; 0xc1;(黄色)(デフォルト)
:[15] 一組にあつかう行数 n = 0:横罫線無し (デフォルト = 1)
:[16] ディスクリンクのファイル常時オープン数上限 (デフォルト = 1)
:[17] 最初から一行表フラグ =n      (デフォルト = 0)
nは[一行表]を置いたファンクションキーの位置 1−−
:[18] リタンキー入力モード = 1 (デフォルト = 0)
:[19] CODSELのコードオーバー時の表示文字(デフォルト = 「(オーバ)」)
:[20] 「一行表」のレコードNO.げた -1 なら無表示 (デフォルト = 0)
:[21] 1をセットすると、BEFOREルーチン より 先に s_all_disp() する
:[22] 一行表LOCの時のページ番号を返す(1,2,・・・)
:[23] = 1 とすると、「変更前データ」と「変更後データ」の形式が以下となる
SDBのみでデータをREAD/WRITEしている場合、生のバイナリデータ
のままで扱うのが基本だが、「DIET」命令中の「OLD値」「NEW値」の
次のタイプだけはフォームを変換してくれる。
タイプ6:yy/mm/dd タイプ7:yymmdd タイプ8:money Long タイプ12:money HighLong
タイプ16:hh:mm
そこで取った値をそのままH変数に入れたりすると、フォーム逆変換がされずに
入り、結果 おかしなデータになる。変換すれば良いのだが、追加として、
これを1にセットしてある場合は(途中で変更になっても可)
     「OLD値」「NEW値」を取った場合のフォーム変換をしないで
正確には再変換して、生の数値としてもらえるモードを追加した。
(ちなみに小数点LONG値等は、小数点付きにフォーム変換してあるのが
SDBの基本であるし、あくまでも返ってくる前回値と新値についてのみ
であり、H変数に読み書きする上では、生データが基本である。)

無しでも良いが、もし在れば
    先頭ダミーバイト
    最後ダミーバイト
  ファィルサイズの大きすぎる(64KByte以上)表については、
  こま切れにして操作することができる。管理はSDBにて行う。
:[24] = 1 とすると、会話せずにすぐ戻る
  表示だけなどに使える start , before 処理は通る

****** 内部で HFLCLS ALL を自動実行している ******
DEF 名は定義ファィルを指定するが、必ず指定が必要である。
DAT 名は対象とするファィル名をいうが、現在このファィル名を割り当てられているH変数を見つけ
唯一のデータ(他のH変数にはそのファィルは存在してはならない)としてそのチェックを行う。
もし DAT 名の部分に H** のようにH変数を書けば、その時H**に設定されているファィルを
対象ファィルとみなし、その場合は他のH変数に同じデータ名があるかどうかのチェックはしない。

例:

VAL M01[32]
VAL M02[32]
VAL C01
VAL H01[DEMO]

'M01 設定ファンクションを羅列する    下では1つしかしてない
M01[1] = " 終了 "

標準として準備したもの
 "@↓↓","A↓↓","B↓↓","左端へ","右端へ","先頭行","最終行"
 "上複写"," 完了 ","モード替"," 記憶 ","貼付け","行削除","行復帰"
 ,"行挿入","行複写"," 罫線 "," 終了 "," 中止 ","即中止"
,"一行表","全行表"," 印刷 ","即削除","即復帰","即挿入","即複写"

"即削除","即復帰","即挿入","即複写" すべて1行処理
確認無しで実行するので、アプリで制御すること。
また、「即複写」は「行挿入」かつ「行複写」である。
「 印刷 」する前に GOUTDV 1 続けて GOUTDV 0 で戻しておく命令を実行すると、印刷幅に影響する。
詳細は GOUTDV 命令を参照。

標準として用意したものは、アプリケーションの指示通り処理した後、
標準処理をするようになっている。

また、C1に "→" , "←" , "↑" , "↓" が入るとカーソル移動があった
とする。但しすでに移動済み。

また、C1=”xxx”とすると、押されたファンクションを変更
することができる。

M02[7] = "BEFORE START"
M02[8] = "ENTRY"
M02[9] = "FUNCTION BYEBYE"

** 上の例では、会話ループに入る前の1回きりの処理を :START で **
** :BYEBYE では最後の1回きりの処理をする           **

M02[10] = 1
M02[11] = 0
M02[12] = 5
M02[13] = 0
M02[14] = 0x41
M02[15] = 1

DIET DEMO.DEF DEMO.DAT "" 128 0 M01 C01 M02

END 0

:BEFORE
R = M02[3]
H01[R][1] = 123

F = M02[5]
IF F == 5
DIETSEL 6 30 5 A$ C$
h01[r][1] = c$
h01[r][2] = a$
FI

RETURN

:ENTRY
R = M02[4]
F = M02[6]
IF F == 2 || F == 3
A = H01[R][2]
B = H01[R][3]
H01[R][4] = A + B
FI
IF F == 3
M02[5] = 2
FI

RETURN

:FUNCTION
'省略 たとえば C1 の比較など
RETURN


***** ここで、SSDBの中のDIETでは、「一行表」は *****
***** サポートされない。そこで、定義ファィル名.LOC *****
***** ファィルがあれば、その内容を元に、「一行表」操作 *****
***** が可能である。                  *****

作成例:DEMO.LOC

(先頭に'#'があれば,そこから行末までコメントと見なされる)
ファイル名:定義ファイルと同じファイル名に拡張子が".LOC"とする
・ 必ず P1 から始める。(各ページ表示の直前行の先頭に P n−ページaj
・ 各列の入力枠は '$'から始まり,2桁目から列番号(1〜),そして入力枠の語尾まで
'$'を続ける(列番号で終わってもよい)
・Pの次行から,Pの前行までの入力枠以外の文字列は,すべてそのまま表示
される(表示各行は改行コードで終わること)(行当り最大カラム数は半角80文字)
・半角2バイトコードは使用しないこと。

〔例〕
P1 # これより1ページ目
商品番号 $1$$$$$$$$$$$$$$$$$$部門 $2$$$単価 $3$$$$$$
日付 $1$$$$$$$担当者 $2$$$$$$$$$$$着荷日 $3$$$$$$$$$$

P2 # これより2ページ目
・・・・
・・・・
P3 # これより3ページ目
・・・・
・・・・

LOCを利用した場合、例えばBEFORE処理で画面表示をさせていても、
初期表示により消されてしまう、ということが発生する。そこで、M2*[21]に
1をセットすると、BEFORE処理より先にバック画面を表示するようになり、
BEFOREにて表示する項が消去されない。

また、M2*[22]には一行表LOCの時のページ番号を返すようにしてあるので、
ページにより処理内容を制御することができる。例えば、FUCTION処理では
この数値は、次に会話にはいるページ番号(1から)を返す。



印刷は、もしPR201系のプリンタなら COMSAVE ”PR201” 1
という命令を実行して、PR201に何かデータを入れておくことが、PR201系
のプリンタにスルーアウトさせるという意味になり、処理速度が上がる。
終われば COMSAVE ”PR201” ”” を実行して、データをヌルに
戻せば、元のWINDOWS印刷モードになる。
CHILD命令で 「DIET」を走行させる場合も同じことがいえる。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIETの表 処理中 にコードセルを使う
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIETSEL 変数(フィールドNO.) 変数(X) 変数(Y) 変数(結果) 変数(選択データ)

結果は、1−−なら選択NO. 特殊キーは -1 : [↑]キー
-2:[↓]キー -3:[←]キー -4:[→]キー -5:[ESC]or[TAB]
最後に、選択データそのものも、返す
フィールド(1−−)はソースのしか指定してはダメ
そこが、ソースなしの場合はその番号で良い

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIETの表 処理中 にコードセルデータをGET/PUTする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIETGPT 変数(フィールドNO.) 1/0 変数(エントリーNO.) 変数(データ)

0:データ読み出し  1:データセット
フィールド(1−−)はソースのしか指定してはダメ
そこが、ソースなしの場合はその番号で良い

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIETの表 処理中 に最大レコード数を得る
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIETMAX 変数(S_recmax) 変数(ヌルレコードをのぞいた最大レコード数)

今の表の最大レコード数と実質の最大を得る

DIETMAX A B で 1行目がヌルでも B が1になっていたのを

SSDB21Nでは、0になるようにした。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIETの表 処理中 にフィールドのタイトルを変更する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIETTIT 変数(フィールドNO. 1カラ) 変数(項目タイトル)

指示(1から)フィールドのタイトルを変更する。
最初から充分な大きさにしておくこと。
いまの文字数以上にはセットしないので

もし、フィールドNO.が1000以上なら、1000を引いた分がグループNO.
ということで、グループタイトルを変更する。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIETの表 処理中 に表示枠幅サイズを変更する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIETHAB 変数(フィールドNO. 1カラ) 表示枠幅サイズ

指定幅はDEFファィルに定義のものより小さいこと

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIETの表 処理中 に隠しパターンを設定する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIETHID 隠しパターン(1は基本) 0は再表示のみ

  DIETループ中でH変数データを変更して、RETURNしても表示データが
  更新されないで、カーソルをそこへやると実はデータは更新済みであるという現象
  をなくすには、この命令を実行すると、画面を更新してくれるので解決する。

  ただし、例えば一行表などで、「再表示」のみしたい時などは、
DIETHID 0 で隠しパターンを操作せずに、「再表示」できる

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIETの表 処理中 に横ラインの属性設定をする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIETATR 1/2 変数(フィールドNO. 1カラ)

1:US 2:UA タイプ

[DDIETのスイッチ]
/US<列番号> ォ 指定された列番号のデータが0かスペースなら、その
行表示色は白で、それ以外ならシアン。(1〜S_fldmax)
/UA<列番号> ォ 指定された列番号のデータは、行表示色の属性。
(属性データ) (列番号:1〜S_fldmax)
1の位 0:通常 1:青 2:赤 3:紫 4:緑 5:水色 6:黄色 7:白 8:無
10の位 0:通常 1:点滅 2:反転 3:点滅・反転 4:下線 5:点滅・下線

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIETの表 処理中 に縦横合計をする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIETSUM 1/2/3 (1) (2) (3) (4) (5) (6) (7) (8)

1:パターン 1 2:パターン 2 3:パターン 3
st:start ed:end sp:step _r:レコード _f:フィールド
an:answer
(1) (2) (3) (4) (5) (6) (7) (8)
パターン 1 : st_r ed_r sp_r st_f ed_f sp_f an_f
レコードをまわしながら、横方向の合計をとり、 an_f にセーブする
パターン 2 : st_f ed_f sp_f st_r ed_r sp_r an_r
フィールドをまわしながら、縦方向の合計をとり、 an_r にセーブする
パターン 3 : st_r ed_r sp_r st_f ed_f sp_f an_f an_r
レコードをまわしながら、横方向の合計をとり、an_f にセーブする
続いてフィールドをまわしながら、縦方向の合計をとり、an_r にセーブする

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIETのイニシャライズ前に、コードセルのファィル名を変更しておく
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CODFCHG 変数(コードセルファィル名1) 変数(コードセルファィル名2) CHANGE
1 を 2 に変更 DIET がはじまってからでも可能
16個まで登録できる。
くり返す場合は、最初に CODFCHG "" "" を実行して置くこと
普通は、同じファィル名2を指定された場合は、処理時間の関係で、変更処理を
しない。しかし、 CHANGE(実は何でも良い) を付けると、ファィル名が
同じでも、切り替え処理を実行する。[名前は同じだが、その時その時で中身
が違う時に使う]

 使用例:

CODFCHG "" "" --> メモリ節約も含めて考えれば、クセとして必ず
実行した方がよい
CODFCHG "YYSAKE.DAT" "YYSAKE.DAT" --> DIET 命令の中で、変更するよという
宣言の効果しかない
CODFCHG "YYSAQQ.DAT" "YYSAQQ.DAT" --> 16個まで宣言できる

(当然 左のファィル名は、DIET する DEFファィル にコードセルとして
宣言されていなければならない)

DIET "YAYA.DEF" YAYA.DAT" "" ・・・・・・・・・・・・・・・

CODFCHG "" "" --> メモリ節約も含めて考えれば、クセとして必ず
DIET 終了後も実行した方がよい

・・・・・
・・・・・
・・・・・

:BEFORE

CODFCHG "YYSAKE.DAT" "WORK1.DAT" --> "YYSAKE.DAT" の コードセルエントリー の
ファィル名を "WORK1.DAT" に変更する。
すでにされていれば実行しない。
CODFCHG "YYSAQQ.DAT" "W99.DAT" CHANGE --> "YYSAQQ.DAT" の コードセルエントリー の
ファィル名を "W99.DAT" に変更する
すでにされていても、内容が変更
されているかもしれないので、
変更処理を実行する。

RETURN

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIET会話中に「ヘルプ」キーを押した時の処理
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

  DIET命令処理中にファンクションキー「ヘルプ」を押した時の処理として、
  命令 [HELP 説明ファィル名]  の処理をSDBに追加しておきます。
   説明ファィルの構成:シーケンシャルファィル。エディタ等で作成します。
     先頭から半角40文字固定長の[説明タイトル]と、続けて半角8文字の
     ファィル名。このファィルは拡張子が.HELのファィルだとみなします。
     その内容は、横最大半角78文字、縦最大23行の範囲であらかじめ記述
     しておきます。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆DIET中の行がヌル行かどうかを聞く
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

DIETNUL 変数(レコード) 変数(結果)

DIET中のH変数について、そのレコードが[ヌル]行かどうかを返す
結果:その行がヌル行なら 1 を それ以外は 0 を返す

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

      BEEP --> ビープ音を出す

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆一画面以内の文字列編集入力をする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

EDITOR 変数(ファィル名) 変数(タイトル) 変数(結果)

テキストファィルを編集する
但し、1面以上の量を編集するなら、他のソフトを遠隔で利用すること
ファィルサイズ 1600バイトまで
これで作ったファィルを暗号化するなどして、秘密チャットに使える

返値:0なら完了   −1なら中止

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆漢字入力モードをONOFFする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

IMEONOF 0 IME OFF
IMEONOF 1 aa bb ON
aa : 全/半 全角か半角か
bb : かな/カナ/英数 3種のうちのどれか

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆テスト的に変数を表示する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
デバッグの時などに利用する

TESTP 変数
TESTP A$

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆とにかく1キーとる テスト用
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

TESTK ヌル

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆YES/NOを聞いてくれる
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
NOとタイムアウト時のとび先ラベルをかく。タイムアウトからは無くてもいい
YとNの2つのキーと、選択後はリターンキーを加えたキーしか効かない。
YかNかを押すとそこが枠でかこまれ、リターンキーを押して決定する。
だから最初は、YES/NO どちらも枠で囲まれてはいない。

YESNO 変数(Y) NOラベル タイムアウト タイムアウトラベル

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆YES/NOを聞いてくれる その2
☆ WINDOWSのダイアログを使ったもの
☆ メッセージ2行付きなので画面を気にしなくてよい
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

NYESNO 変数(上段メッセージ) 変数(下段メッセージ) Y/N ラベル

Y/N ラベル の意味

     Y YESLABEL なら YESならYESLABELへ行け!

     N NONLABEL なら  NOならNONLABELへ行け!

この命令にはタイムアウトは無い

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆エラーメッセージ表示、キー待ち
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

ERREC 変数(エラーメッセージ1) 変数(エラーメッセージ2) 確認指示

普通は、 ★★[エラーです]★★
       (エラーメッセージ1) (エラーメッセージ2)
OK

アーギュメント3つ目に何かを書けば「確認」だとみなして、
◎◎[確認です]◎◎
       (エラーメッセージ1) (エラーメッセージ2)
OK

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆何か確認させたいコメント・メッセージを表示し、キー待ち
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RECOG 変数(確認コメント1) 変数(確認コメント2) 変数(確認コメント3)

確認コメント1
確認コメント2 確認コメント3
OK

ERREC との違いは、トップのメッセージが自動か独自でつくるかの違いと
RECOG も ERREC の「エラー」も BEEPするが、ERREC の「確認」は
BEEPしない。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆メッセージを複数行出す    YES/NO タイプ と OK タイプ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
MSGBOX Y YESLABEL "title" "MES1" "MES2" ・・・・・・・ "MES10"
MSGBOX N NOLABEL "title" "MES1" "MES2" ・・・・・・・ "MES10"
MSGBOX O ダミー "title" "MES1" "MES2" ・・・・・・・ "MES10"

MES? の途中で \n マークは CR/LF の意味

O ならラベルはダミーが必要

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆読み込みファィル名を聞くルーチン
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
      ファィルが無ければ、キャンセルされるまで聞き続ける
キャンセル時ラベルへ飛ぶ

R_FILE 変数 ラベル
R_FILE A$ ESCJUMP (TITLE) (FORUDA)
使用例:
R_FILE A$ ESCJUMP --> ファィル名を聞く。ファィルが存在しな
・・・・・・・・・ ければ、存在するファィル名を入力され
・・・・・・・・・ るまで、聞く。ESCキーで中止する。
:ESCJUMP

SSDB21N.EXE では、続いて (TITLE) かあればタイトルを、(FORUDA)

また、(FORUDA) があればファィルを聞くのではなくフォルダを聞くことになる


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆書き出しファィル名を聞くルーチン
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
      ファィルが有れば上書きしていいか聞く
キャンセル時ラベルへ飛ぶ

W_FILE 変数 ラベル
W_FILE A$ ESCJUMP
使用例:
W_FILE A$ ESCJUMP --> ファィル名を聞く。ファィルが存在すれ
・・・・・・・・・ ば、上書きしてよいかどうかを聞く。
・・・・・・・・・ ESCキーで中止する。
:ESCJUMP

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆画面位置情報をファィルより読み、x,y座標情報をDにいれる
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
SMMO.EXEで作成した位置情報を読み込む 説明は別途参照
M**はシンボルがはいっているものとする
1つめのD**はX  2つめは Y を示す

LOCGET M** D** D** 変数(ファィル名)
LOCGET M10 D1 D2 "TEST.MMO"

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆会話ループにはいる
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
LOOP D** M** M** 変数(今入力したエリア番号 1 - )
ツヅク 変数(その時の特殊キー)

LOOP D1 M1 M2 I A$

[下記例 参照]

 ** [会話ループ]より、DIET命令の一行表モードの方が使いやすい **
 ** 場合があるので、使い分けるようにする。             **

 ** SSDB21N からは 廃止された

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆会話ループのおわり
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

POOL ヌル

[下記例 参照]

 ** SSDB21N からは 廃止された

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆会話特殊処理中で 会話の制御をここへ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SETSYM 会話番号
SETSYM 8

[下記例 参照]

******** 会話ループの作り方 ************************ ソース例

val d1[20][3]
val m1[20]
val m2[20]
cls

d1[1][1] = 10 入力エリア1の x
d1[1][2] = 5    入力エリア1の y
d1[1][3] = 10   入力エリア1の サイズ もし、FEP起動するなら100加算

d1[2][1] = 10 入力エリア2の x
d1[2][2] = 7    入力エリア2の y
d1[2][3] = 110   入力エリア2の サイズ ここはFEP起動する

d1[3][1] = 10
d1[3][2] = 9
d1[3][3] = 10

  ・
  ・
  ・
  ・

loop d1 m1 m2 i a$ 'LOOPとPOOLで囲み、他へは飛ばないこと
'ループを抜けるのは、ESC(中止)とF・5のみ

' 入力後必ずここへ飛んでくるが、inkeyb()の入る前とあととで
' データ変更があったかどうかは、リターン値 i が 100だけ
' ゲタをはいているかどうかで判定する
i = i - 100
case a$ F1 toku ' キーはCASE判定可



:toku
if i == 1 ' いま入力されたのがエリア1なら・・・


setsym 5 ' 入力エリア5へ飛べ
fi



pool

  ・
  ・

 ** SSDB21N からは 廃止された

**********************************************************

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数1の左から変数2分を変数3へ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

LEFT 変数1 変数2 変数3
LEFT A$ 16 B$
使用例:
      A$ = "ABCDEFG"
LEFT A$ 3 B$ ---> B$ = "ABC" となっている

関数 LEFT() の方をよく使う、上の例でいえば、 B$ = LEFT(A$,3) である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数1の右から変数2分を変数3へ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RIGHT 変数1 変数2 変数3
RIGHT A$ 16 B$
使用例:
      A$ = "ABCDEFG"
RIGHT A$ 3 B$ ---> B$ = "EFG" となっている

関数 RIGHT() の方をよく使う、上の例でいえば、 B$ = RIGHT(A$,3) である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数1のどこ(変数2)(1〜)から何バイト(変数3)を変数4へ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

MID 変数1 変数2 変数3 変数4
MID A$ 3 4 b$
使用例:
      A$ = "ABCDEFG"
MID A$ 3 3 B$ ---> B$ = "CDE" となっている

関数 MID() の方をよく使う、上の例でいえば、 B$ = MID(A$,3,3) である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数を文字列とみなして連結
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
一番先頭の変数に、右に並ぶ文字列をくっつけて、その変数を完成させる

STRCAT 変数 変数 変数 変数 変数 ・・・ 変数

元を含めて変数の個数を12個まで並べることが出来る。

STRCAT A$ B$ C$
使用例:
A$ = "1234"
STRCAT A$ "56" "78" --> A$ の内容は "12345678"

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数1の文字列に ,を挿入して、金額型とする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

MONEY 変数1 変数2
MONEY A$ B$
使用例:
A$ = "123456"
MONEY A$ B$ --> B$ は "123,456" になっている

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数1(unsigned int)を日付文字列に
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
      変数 1 は 1987−1−1を1とする万年暦である。
1:**/**/** タイプ 2:****** タイプ

DATE 変数1 変数2 1/2
DATE V1 A$ 2
使用例:
DATE 1 A$ 1 --> A$ には "87/01/01" が入る

追加仕様:もしV1が0なら、本日の暦を返す(型は変換タイプによる)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数1(日付文字列)を unsigned intに
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
      変数 2 は 1987−1−1を1とする万年暦である。
1:**/**/** タイプ 2:****** タイプ

MANN 変数1 変数2 1/2
MANN A$ V1 2
使用例:
A$ = "870101"
MANN A$ A 2 --> A には 1 が入る

追加仕様:もしA$がヌルなら、本日の万年暦を返す(変換タイプは無関係)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数1(日付文字列)より曜日をもらう(日,・・)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
1:**/**/** タイプ 2:****** タイプ

WEEK 変数1 変数2 1/2
WEEK "92/01/01" A$ 1
使用例:
WEEK "93/07/16" A$ 1 --> A$ には "金" が入る

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数の両サイドから全角・半角のスペースをカットする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CUT 変数 ヌル/1

CUT A$
CUT A$ 1 うしろに1が付くとすべてのスペースをカットする

使用例:
A$ = " A BC "
CUT A$ --> A$ は "A BC" になる

CUT A$ 1 --> A$ は "ABC" になる

 関数 CUT()では、A$=CUT(B$)のように、その変数自体は変化しない
 が、ここでは変更されてしまうことに注意。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数の文字列を枠内右詰めとす
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RPACK 変数 変数(枠サイズ)
RPACK A$ 5
使用例:
A$ = "1234"
RPACK A$ 8 --> A$ は " 1234" となる。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆小数以下何桁にそろえる(切り捨て)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SYOSU 変数 小数以下桁数
SYOSU A$ 3
使用例:
A$ = "1234.56789"
SYOSU A$ 1 --> A$ は "1234.5" になっている

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆この命令以後演算時に小数以下桁数をどうする?
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
1/0 1:四捨五入する 0:切り捨て

ROUND 以後演算小数以下桁数 1/0
ROUND 5 1
使用例:
ROUND 5 1 だと、以後の演算では少数以下5桁までとして、その時
6桁目は四捨五入する。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ソート処理 SORT1 から SORT4 まで
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
SORT1 L/S 1/0 変数(サイズ) ソート使用開始
L:大きい順 S:小さい順 1:long値 0:ANK(サイズ意味あり)

SORT2 変数(データ) 変数(エントリーNO.) ソートデータ登録
これを繰り返す 最後にヌルでSORT実行を指令
同値ならエントリーNO.順になる

SORT3 変数(エントリーNO.) ソートデータ取り出し
これを繰り返す

SORT4 ヌル     ソート終了

使用例
SORT1 S 1 または SORT1 L 0 16
FOR I = 1; I <= 30; I = I + 1
SORT2 H1[I][15] I
ROF
SORT2 ""
FOR I = 1; I <= 30; I = I + 1
SORT3 A
H1[A][18] = I
ROF
SORT4

[複合ソート処理をしたければ、 SYSTEM 命令で 「SS.EXE」 を利用する方法もある]

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆排他的論理和を計算する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
例: XOR D10 2 100 A
D10[2] から D10[100] までを XOR 演算する
変数の数値範囲は LONG 以内

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆16進値を変数にセットする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
例: HEXSET D10[3] AF
D10[3] に16進数 0xAF を埋め込む

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆消費税計算、逆計算をする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
ZEICAL 1/2/3 消費税 元数値 計算結果 結果としての税額 判定結果

1:切り捨て 2:四捨五入 3:切りあげ で、普通に消費税を計算する
「元数値」から税込数値と消費税額を教えてくれる
11,12,13 同上で税込価格を元値と消費税に分ける(解なしもある)
「元数値」を税込数値として、税抜数値と消費税額を教えてくれる
判定結果 0:正常 普通の税計算なら元値が -1,0,1 であっても良い
1:逆計算のとき「解無し」
2:逆計算のとき元値が -1,0,1 だ

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆system()関数
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SYSTEM プログラムアーギュメント羅列 走行ディレクトリ 1/2 PX PY WX WY
1:NORMAL 2:HIGH PRIORITY 3:隠しモードNORMAL
ディレクトリ : 起動時のカレントディレクトリ
PX,PY 最初の位置
WX,WY 幅
DEFAULT を使っていないアプリなら PX から WY は無くてもいい

例: SYSTEM "A:\COMMAND.COM A:\ /CB:HEXEC B:T.DEF" "B:\" 1 100 100 900 900
[DOSアプリ]終了後ウィンドゥを閉じる

SYSTEM "A:\COMMAND.COM A:\" "" 1 100 100 900 900
[MS−DOSを開く] EXIT でウィンドゥを閉じる

SYSTEM "B:\DV4\WINDIET.EXE B:\DV4\T.DEF" "" 1 100 100 900 900
[WIN16アプリ]

SYSTEM "D:\DV4\WINDIET.EXE D:\DV4\T.DEF" "" 1 100 100 900 900
[WIN32アプリ] 但しWINSAK32.DLLは同時には使えない


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆別の独自開発アプリを起動して、終了を待つ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

      EXECPRG "AAAA.EXE TT.ARG" "D:\SAKE32BC\SDB" ID

EXEコマンド列  動作ディレクトリ ID

(特例)EXECPRG CLIP "・・・・・・・ のように第一引数が CLIP なら、その内容を実行する

     S_SSDBを起動して、そのSDBがまた、EXECPRGを
     使っていれば、「待ち」がおかしくなるので、S_SSDBは起動しない
ID = 0 -- 32 1から32はイベント番号を示し、これに対応するのは
終了時にそのイベントをセットするようにしたアプリケーションだけである。
この時渡すアーギュメントに「/PWAITnn」が追加されていることに注意
普通のWINDOWSアプリを待機状態で待つには、ID=0または
指定無しで呼び出す。

また、IDの代わりに MAXまたはMINなら、それぞれ最大化、最小化で
起動される。当然イベントとは無関係の他社のプログラムの場合だけである。
さらに、ASYなら非同期に起動され、その終了を待たない。(Ver.4以降)

    また、 MAX 指定をすると、呼んだ方をMINにし、完了後MAXに戻す

  例:WINDOWS−NTと95でのBAT,CMDファィルの呼び出しの違い
    95では 「START.EXE」が存在する。
        EXECPRG "START /MIN /WAIT /CAPLPROC ARG1 ARG2" "."
      APLPROC.BAT に ARG1 , ARG2 というアーギュメントを付けて
      最小化かつ終了まで待つというモードで実行する。
      最小化で実行するため、フォーカスを取る事はなく他に影響しない。
    NTでは 「START.EXE」が存在しない。
        EXECPRG "CMD.EXE /CSTART /MIN /WAIT APLPROG ARG1 ARG2" "."
      APLPROC.BAT に ARG1 , ARG2 というアーギュメントを付けて
      最小化かつ終了まで待つというモードで実行する。
      最小化で実行するため、フォーカスを取る事はなく他に影響しない。

  例:WINDOWS−95で一太郎を起動する場合
EXECPRG "START A:\WINDOWS\デスクトップ\一太郎8.LNK" "." MAX
とすると、一太郎を実行させてすぐ戻る。
あるいは、「一太郎」が終了するまで待ちたい場合は、LNKが使えなく、
EXECPRG "F:\JUST\TAROWIN8\TARO.EXE" "F:\JUST\TAROWIN8\" MAX
などとなる。

  例:関連ファィルを指定しても関連プログラムが起動される
EXECPRG "F:\TEST.XLS" "." --- MS−EXCELが
EXECPRG "G:\TEST.HTML" "." --- IEが      起動される

また SSDB21N.EXE の場合下記の機能もある MAX や MIN の部分に

ASY:非同期ノーマルモード ASYMIN:非同期最小化モード

ASYMAX:非同期最大化モード ASYHID:非同期隠しモード も使える
***************2005−8−10 EXECPRG を 2005-7-14 に少し変えたら、それまで httpsrv を ASY で起動したら 隠れモードで走ってくれたのに、ウィンドゥが出るようになったことに今日気付く そこで、 ASY 起動にプラスして下記の起動モードを追加した ただし、コンソールアプリにしか効かない
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆H**変数のMAXレコード数をセット
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

HRMAX H** 変数
HRMAX H10 V10

使用例:
VAL H1[TEST] --> TEST.DEF を H1 変数で定義
'DEF NUMBER 15 --> フィールド番号をここで定義可能
HRMAX H1 A --> 最大レコード数を調べる
FOR I = 1; I <= A; I++ --> 以下、今存在しているH1のファィル
H1[I][NUMBER] = I      のフィールド15に1からの連番を
ROF               セットしている


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆H**のファィル名変更
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

HFCHG H** 変数(ファィル名)
HFCHG H10 "TEST.DAT"

ファィル名が無い場合は、今のファィルをサイズチェックし直すという意味になる
使用例:
VAL H10[TEST] --> TEST.DEF 内の定義ファィル名が T.DAT
・・・・・・・・ とすると、HFCHG で変更されるまでは、
・・・・・・・・ T.DAT を対象とする。
HFCHG H10 "DUMY.DAT"

(注)HFCHG H10 "TEST.DAT" を実行後、何らかの処理で TEST.DAT の容量が
   変更された場合、内部ではチェックしないようになっているので、
   必ず HFCHG H15 "DUMY.DAT" または HFCHG H15 を実行すること

(追)裏でのデータ受信などの為に HFCHG ALL も追加した
全Hファィルについて、サイズを見直す命令である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆H変数のあるレコードを、別のまたは同じH変数のレコードへコピーする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

1レコードサイズ分全てコピーする。
通常はどちらも同サイズのH変数にするであろうが、以下の説明のように
あえてレコードサイズの違うH変数同士でコピーさせることも可能

  左から右へコピー(H**2 から H**1 へ)

MOVE H**2[] H**1[]
MOVE H**2[] H**1[] >
例外として 2の方がレコードサイズが大きい場合を許す
       この場合は 1のサイズ分のみ移される
MOVE H**2[] H**1[] <
例外として 1の方がレコードサイズが大きい場合を許す
       この場合は 不足分にはヌルコードが詰められる

DIET表操作中でも可能

MOVE H10[10] H3[5]
使用例:
VAL H1[TEST1] --> TEST1.DEF を H1 変数で定義
VAL H2[TEST2] --> TEST2.DEF を H2 変数で定義
HRMAX H1 A --> 最大レコード数を調べる
K = 1
FOR I = 1; I <= A; I++ --> 以下、今存在しているH1のファィル
IF H1[I][10] == 1 のフィールド10が1になっている
MOVE H1[I] H2[K] レコードをH2のファィルに抽出する
K++
FI
ROF

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ヌルレコード−−>H変数の1レコード
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
H変数**へそのヌルレコードをセットする
そのH変数用のヌルデータを指定レコードへ書き込む
ヌルデータとはバイナリー0データにシーケンシャルファィルまたは
文字タイプのエリアにスペースコードを書いたものである。
NLMOVE H**[]
NLMOVE H3[5]
「MOVE」命令との違いは、もとになるデータが無いということである

使用例:
VAL H1[TEST1] --> TEST1.DEF を H1 変数で定義
VAL H2[TEST2] --> TEST2.DEF を H2 変数で定義
HRMAX H1 A --> 最大レコード数を調べる
K = 1
FOR I = 1; I <= A; I++ --> 以下、今存在しているH1のファィル
IF H1[I][10] == 1 のフィールド10が1になっている
NLMOVE H1[I] H2[K] レコードのフィールド12をH2の
H2[K][3] = H1[I][12] フィールド3に取り出す。H2の他の
K++ 領域はヌルデータのままである。
FI
ROF

NLMOVE D10 -- D10[] 全てに 0をセット
NLMOVE M10 -- M10[] 全てに ヌルをセット

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆H変数をCLOSEする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
ファィルOPEN数が多すぎた時、一部CLOSEする時や、そのファィル
を一度クローズしないと現在のサイズを知ることができない場合等に使用する

HFLCLS H** (OK)
HFLCLS H10

OKが無いと、現在オープン中でないとエラーとしている。

WIN32版 追加   HFLCLS ALL --- すべての HFLCLS をCLOSE

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆H変数のレコード比較をする WIN32版 のみ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

HFLCOMP H**[n] H**[n] 変数(結果)

   1レコードすべてを物理的に比較する
   結果 = 0 : 違う = 1 : 同一

同一H**でも可能で、レコードサイズの短い方のサイズ分比較するという仕様
であるが、唯一の問題点は、システム開発途中でフィールドが追加された時など
では昨日まで使っていなかったエリアまで、比較の対象になることである。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆H変数の定義をH99にコピーする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
ファィルOPEN数が多すぎた時、一部CLOSEする時や、そのファィル
を一度クローズしないと現在のサイズを知ることができない場合等に使用する

DEFCOPY H**
DEFCOPY H13

H99は最初に定義しておくが、ダミーの意味である。
途中で、DIET命令などを使うためにある。
フィールドNO.は同じにしてでも、違うDEF(例えばレコードサイズが倍)
   としてDIETしたい時など、パッチルーチンがH99で書けて共通で使えれば
   という時に利用可能である。
   この命令により、H99は最初のVAL定義が無効となる。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆H変数のファィルに対して縦方向の合計を計算する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

呼ぶ前のM**には加算したいフィールドNO.(1から)を並べ、
最後は 0 または ”” で閉じておく。
但し、そのフィールドはANKと数値タイプ以外は指定できない。
結果の数値はM**にはいるが、件数というのは加算していく上で、
そのレコードの値がスペースまたは0であった場合を無効とみなした場合の
有効件数ということ。
元のH変数には何の変更も加えられない。

TSUM H** 変数(start) 変数(end) M**(結果) M**(件数)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆データサーチ 文字列タイプの比較文字が短かければLEFTの比較
☆ 数値データのセルでも構わない
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

結果=−1なら MAXまでに該当無し

SEARCH 諸変数 変数(スタートREC.) 変数(比較値) 変数(結果REC.) インデックスファィル
< or >

続けて指示マーク<,> があれば、==ではない
< なら 変数値 < 指定値 の関係を調べる
その場合はフィールドタイプは数値であること D** , H** , ED**
H変数の場合でINDEXありの場合は、指示マークの位置はずれる

諸変数とは、 「D**」 「M**」 「H**[f]」
「H**[f]」の場合は使用するなら続けてINDEXファィル名
を置く。もちろんなくてもいい。
  この時の結果REC.とは、インデックスファィル上でのREC.位置をいう

【H変数で小数点付きタイプのフィールドの場合】

   **** 指定する数値は内部の生データを指定することに注意 ****


フィールドタイプがANK・漢字・混合の場合は、比較文字を左から比較
して、その長さ分が少なくとも一致すれば良いとする。

スタートREC. 結果REC. ともに 1から

H変数をSEARCHする時で、1レコードづつではなく、何レコードかの幅を
持たせたいなら、その1グループを1レコードとするようなH変数を作って
対処すること。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆データサーチのステップ幅を設定する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SCHSTEP A

以後の SEARCH H[**] では、全レコードではなく
Aレコードずつ飛ばして、サーチする。
[1に戻さないと戻らない、また、OUTでSDBを連結する場合も、以前の
 ものに影響されることに 注意!!!]

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆アーギュメントを取り込む
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

ARGV M** 変数(個数) 受け取った個数
ARGV M10 A
使用例:
VAL M10[5]
・・・・・・・・・
ARGV M10 A --> 例えば起動が A>SSDB TT.SDB 1 N AA BB
とすると A = 2 , M10[1] = "AA"
M10[2] = "BB" となっている。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆環境変数をとりこむ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

GETENV 環境変数 変数(結果変数文字) (OK)

最後にOKが付けば、もし環境変数が存在しなければヌルを返すだけで、システムを停止させない。

また、SSDB.INI 等で設定したプログラム内の環境を先に探し、無ければ GETENV() する。(起動パラメータやその他の説明欄参照)

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆コンピュータ資源をファィルに1行ずつ取る
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
?SIGEN 0/1/2/3/4 変数(ファィル名) 変数(件数)

0:画面フォント名 1:プリンタフォント名 全てをファィルに出す

2:WINDOWSディレクトリを返す 3:コンピュータ名を返す
4:デスクトップのフォルダ返す
結果は 最初の変数に返す

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数を1バイト数値としてプリンタ出力
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CPRINT 変数
CPRINT CR --> リターン
CPRINT CR3 --> リターン 3回CRをする
CPRINT ESC___ --> 続く___をESC付きでOUT
CPRINT FF --> ページ送り

上記の文字以外は変数値を1バイトのデータとして出力する (0はダメ)
例:CPRINT 13 −−> ポイントをヘッドに移すが、改行しない

プリンタ命令なので、先に GOUTDV 1 が必要であることに注意!。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆変数文字列をプリンタ出力
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

LPRINT フォーム パラメータ(0/1/2) M**
LPRINT "AAAA" 2
パラメータ 無しまたは0:ANK(普通文字)と漢字は1:2
1:ANK(2バイト半角で)と漢字がドットスペース0で
2:ANK(普通文字)と漢字がドットスペース0で
フォームは 必ず "_________" のパターン
変数M**が有れば、以下のフォームで印刷する
$$$$ : 左詰め #### : 右詰め @@@@ : 0ならスペース印字

参考:CPRINT 14  :  以後倍角
CPRINT 15  :  以後普通サイズ
CPRINT ESCT18 : 縦方向隙間無し 指定
使用例:
VAL M1[5]
M1[1] = "12"
M1[2] = "34"
LPRINT "AAAA=$$$$ BBBB=####" 2 M1

プリンタ命令なので、先に GOUTDV 1 が必要であることに注意!。
[本命令とGOUTDV、PR201の関係]
(1)PR201 という共有変数 != ””の時
GOUTDV 1 1
GOUTDV 1 2 はそのまま有効
GOUTDV 1 0 はスルーアウトなので意味無し
(2)PR201 という共有変数 == ”” (ヌル)の時
GOUTDV 1 2 はスルーアウトが有効
GOUTDV 1 1 は用紙の位置に実寸で印刷されるので有効
GOUTDV 1 0 は用紙の幅・位置によって計算されるが、
半角と全角はどういう印刷方法でも1:2となり、隙間も共通なので、
LPRINTの指定 0/1/2 は無意味

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆フォーム印刷命令
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

HYOPRT 変数(データまたはフォーム名)

最初はフォーム名、以降データ  ヌルでclose
例: HYOPRT ”T.FRM”
   HYOPRT A$
   HYOPRT ”1234”



HYOPRT ”” --> 印刷せよ 命令

データが不足でも良い
2ページ目以降も全く同じパターンを並べる
改ページは外部より CPRINT FF を実行する

デモ版では、この命令を使わないで、「CHILD」命令のHYOUを使うこと

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆自由なフォームサイズで印刷をする(Ver.4以降)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

[プリンタ、画面確認の指定]
[−1だけは使用開始命令以前でも有効]
PRINTP -1 0/1/2/3 0:プリンタ指定も画面確認もなし 1:プリンタ指定なし画面確認有り
2:プリンタ指定あり画面確認なし 3:どちらもあり
[使用開始命令であり、必ず PRINTP 0・・・ からスタートすること]
PRINTP 0 M/I base_x base_y "フォント名"(無くてもいい)
M:ミリ I:インチ    以後の数値の単位  数値は小数付けても良い
以後の描画に加える 相対位置 base_x,base_y
フォント名の位置に ? のみなら印刷に直接出す指定
フォント名の位置に ?ファィル名 なら そのファィルに吐き出す
(あとで、PRINT起動)
この場合は、フォント名はその次にくる(なくてもいいけれど)
フォント名の位置が ? で始まらなければフォント名とみなす
またヌルなら印刷に直接出す指定
[文字]
PRINTP 1 x y wx wy 文字列 (フォント)
ミリ または インチ 表現 もし (フォント) 指定すれば、この文字だけ変更
[枠付き文字]
PRINTP 2 x y wx wy 0/1/2 0/1/2 0/1/2 0/1/2 文字列 (フォント)
0/1/2 の意味 0 = 実線 1 = 太線 2 = 点線
4つの意味  [左][上][右][下] の順にその線の種類をいう
[文字属性]
PRINTP 3 N/L N/I KAITEN N/T N/D R G B
以後の文字に係わる
N/L : L = アンダーライン付ける
N/I : I = 強調文字とする
KAITEN : その文字を回転させる -900 から 900 まで
0で普通 -900 は 右を下にする 90度回転 900 なら右が上
例:右上がりに45度傾けるなら 450 とする
半角2バイト文字は斜めに打たないこと
また、回転させると「枠付き」を指定しても枠は出ない
N/T : T = イタリック体 指定
この場合は文字は1字ずつ出さないと、右が欠ける
N/D : D = 文字の真ん中に線を付ける(打ち消し文字)
R,G,B : 0 - 255 なくてもいい
[枠のみ]
PRINTP 4 x1 y1 x2 y2 0/1/2 0/1/2 0/1/2 0/1/2 R G B
0/1/2 の意味 0 = 実線 1 = 太線 2 = 点線
4つの意味  [左][上][右][下] の順にその線の種類をいう
R,G,B : 0 - 255 なくてもいい
[直線]
PRINTP 5 x1 y1 x2 y2 0/1/2 R G B
0/1/2 の意味 0 = 実線 1 = 太線 2 = 点線
R,G,B : 0 - 255 なくてもいい
[線太さ]
PRINTP 6 w
以後の太線はこの値を使う 指定しない場合は 2 ピクセル のまま
[色]
7:色 R G B 以後の文字、図形に有効
[ビットマップ]
8:図形 X Y WX WY BMPのファィル名
[四角形]
10:四角形 x1 y1 x2 y2 0/1/2 0/1 R G B
0/1/2 の意味 0 = 実線 1 = 太線 2 = 点線
0/1 の意味 0 = 枠のみ 1 = 塗り
無くても良いが R,G,B : 0 - 255
[丸四角形]
11:丸四角形 x1 y1 x2 y2 dx dy 0/1/2 0/1 R G B
dx : 楕円の幅 dy : 楕円の高さ
0/1/2 の意味 0 = 実線 1 = 太線 2 = 点線
0/1 の意味 0 = 枠のみ 1 = 塗り
無くても良いが R,G,B : 0 - 255
[使用終了命令であり、必ずこれで終了すること]
PRINTP 9 この後ろに更に何かの文字を付けると、「印刷中止」の意味とする
以上 ** R,G,Bは指定するとそれがカレントになる(文字と絵は別) **

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆直接 ポートへの IN(バイト読み)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

PTINP 変数(ポートアドレス) 変数(読み込み値)

アドレスは 0X**表現でも可
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆直接 ポートへの IN(ワード読み)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

PTINPW 変数(ポートアドレス) 変数(読み込み値)

アドレスは 0X**表現でも可

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆直接 ポートへの OUT(バイト書き)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

PTOUT 変数(ポートアドレス) 変数(書き込み値)

アドレスは 0X**表現でも可
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆直接 ポートへの OUT(ワード書き)
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

PTOUTW 変数(ポートアドレス) 変数(書き込み値)

アドレスは 0X**表現でも可

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 INITIALIZE
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RSINIT ポート(1,2,3) BPS PARITY BITLONG STOP (error ラベル)


bps = 1200,2400,4800,9600,19200
PARITY = E / O / N BITLONG = 7 or 8 STOP = 1 or 2

ポートのイニシャライズはするが、CLOSEはする必要がない。

イニシャライズエラーの時のラベルが有ればジャンプ、無ければストップする

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 1バイト IN
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RSINP 変数(ポートNO. 1,2,3) 変数(受信値) ラベル(未受信)

受信値は受けた1バイトを十進数でもつので、0から255の範囲となる。
正常で未受信なら受信値は −1  エラーなら −2 となる
当然、未受信の場合はラベルにジャンプする。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 入力 タイプ 1
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RSREAD1 変数(ポートNO. 1,2,3) D** M** 変数(結果) 変数(タイムアウト)

D**には受信バイト数が入り、0でおわり M**には
それに対応して受信データをセットする。
当然、0の受信データはダメとなる(1バイトずつ指定ならOK)
結果=総受信データ数   =−1:タイムアウト =−2:エラー
タイムアウトは、総データ受信完了までの時間

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 入力 タイプ 2
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RSREAD2 変数(ポートNO. 1,2,3) D** 変数(受けサイズ) 変数(結果) 変数(タイムアウト)
D**には受信データが1バイト分ずつ入り、
サイズ分でおわり。 結果=総受信デー数
=−1:タイムアウト =−2:エラー
タイムアウトは、総データ受信完了までの時間

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 入力 タイプ 3
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RSREAD3 変数(ポートNO. 1,2,3) D** 変数(ENDCOD) 変数(結果) 変数(タイムアウト)
D**には受信データが1バイト分ずつ入り、
ENDCODでおわり。 結果=総受信デー数(ENDCOD含む)
=−1:タイムアウト =−2:エラー
タイムアウトは、総データ受信完了までの時間

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 1バイト OUT
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RSOUT 変数(ポートNO. 1,2,3) 変数(送信値) 送信エラーラベル

送信値は1バイトを十進数でもつので、0から255の範囲となる。
送信エラーの時はラベルにジャンプする。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 複数バイト OUT
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RSSEND 変数(ポートNO. 1,2,3) D** 変数(バイトサイズ) 変数(結果)

結果=総送信デー数 =−1:エラー
D**に入る送信値は1バイトを十進数でもつので、0から255の範囲となる。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 ファィル読み出し
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RSFRD 相手先ファィルID 書き込みファィル名 標準ポートのみ

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 ファィル書き込み
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RSFWT 相手先ファィルID 読み出しファィル名 標準ポートのみ

ファィルを読み出し、それを相手に書き込む

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 電話をかける
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RINGC 電話番号 話中ジャンプ先 エラージャンプ先

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆シリアル伝送 電話をきる
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

RINGE

電話を切る  標準ポートのみ

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ダイアルアップのエントリーを接続する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

TELON 変数(エントリー名) 変数(ユーザ名) 変数(パスワード) 変数(エラーコード)

ダイアルアップで電話をかける
エラー 0: 接続しました
1: 接続できません(話中か切られた)
2: 相手が反応しません(着信しない)30 SEC
3: 自分で切った
「電話をかけています」のメッセージは先に出しておくこと

TEL?? 変数(状態NO.) 変数(メッセージ)

電話の状態をチェックする
エラー −1: 電話をまだ掛けていない
 0: 接続中または保留中
4: 相手から切られた
5: 自分で切った
6: なんらかのエラー

TELOFF

ダイアルアップ電話を切る

TELNOP 1/0

1にセットすると上の3命令を「電話がかかったまま」の状態として返す。

0で元に戻す。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ウィンドゥのタイトルを変更する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

WINTITL "タイトル"

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ウィンドゥを最大にする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

WINDOMAX

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ウィンドゥを最小にする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

WINDOMIN

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ウィンドゥのフォーカスを自分のものにする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

FOCUSGET

フォアグラウンドにセットする

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ウィンドゥのフォーカスを自分のものにする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

FOCUSMAN

もし自分がMIN状態でないならフォーカスをとる
(MIN状態以外は自分の天下である)


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆自分の実行優先度を変更する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

PRIOSET 変数(プロセス 1-4) 変数(スレッド 1-7)

下手に変えるとひどい目に遭う

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ウィンドゥのシステムラインの消去/表示
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SYSLIN 0/1 変数(タイトル)

0 ならシステムラインを隠す 1 ならシステムラインを出す

これによりCAPTIONを消しても、画面上の諸サイズは計算し直していない
から、描画すると厳密には少しずれる理屈になる。
但し、この命令でCAPTIONを消すのは、あくまでも一時的な処置と考えよ。
例えば、一行メッセージを書いて、キー待ちだけの画面 など。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ウィンドゥの表示を操作する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
WINDISP 0/1/2

0:ウィンドゥを消す  1:通常表示 2:タスクバーに入れる

0でウィンドゥを消去するとSDB_BASEのタスクトレイグループ
に入ります。


0 に続いて ヌル/0 : トレイにてマウスONですぐMAXに
  1 : シフトキーを押しながらだとMAXに
-1 : なにをしてもMAXにしない
9999 : 前回の設定を触らず

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆画面イメージ要求をする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
DIAGOUT アーギュメントなし

この命令を実行すると、SSDBベースプログラム[SDB_BASE.EXE]

に対して、トレイに入っている全プロセスに対して、現在の「タイトル」と「画面イメージ」を

カレントディスクに吐き出す指示を出させる。

各プロセスは、トレイの2つ目から下へ、$$SCRNnn. (nnは1から)という

というファィル名で出力する。

この画面を確認するには 命令「GAMENO」を使う。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆画面イメージを表示する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
GAMENO ファィル名

命令「DIAGOUT」で出力した、各プロセス毎の今の画面イメージを実際に確認する。

遠隔保守用に利用する。通常なら「$$SCRNnn. (nnは1から)」という名になる。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆他のウィンドゥに対して CLOSE/MAX/MIN を WM_SYSCOMMAND として送る
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
WINSYS  変数(タイトル) CLOSE/MAX/MIN

  3種のコマンドを タイトルのウィンドゥに送る
WM_SYSCOMMAND そのタイトルが現れるまで10秒間はトライする
さらに {} の2文字を付けると その文字列がタイトルに含まれるものを「一致」として良いという意味にする
さらに追加 {} の2文字でなければタイマとみなす 10秒のかわり
{} あり 続いて タイマもあり も有効
また、 CLOSE/MAX/MIN が変数であれば、指定タイトルのウィンドウが生きているか(=1)、または
死んでいるか(=0)の判定を返すこととする。その場合、 {} も タイマも有効である。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆他のウィンドゥに対して 表示位置とサイズを勝手に決める
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
WINLOC 変数(タイトル) 変数(X) 変数(Y) 変数(WX) 変数(WY) {}

最後の {} があれば「タイトル比較」に一部一致をOKとする

   そのタイトルのウィンドゥを指定位置とサイズにする

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆パイプ管理
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

PIPEINI 1-32 パイプ名 1/2 エラーラベル 1:create 2:open
(open のみ エラーラベル 有効)
PIPEGET 1-32 変数 無しはヌル
PIPEPUT 1-32 変数 エラーラベル
PIPECLS 1-32

名前付きパイプをプロセス間または、コンピュータ間の通信に使う
ただし、パイプの create は NT でしか実行できない。

例:ホストが受ける

PIPEINI 1 "SS" 1 -- NT上で
:LOOP
PIPEGET 1 A$
GOTO A$ == "" LOOP
PIPEPUT 1 A$
TESTK
PIPECLS 1

例:クライアントが送る

PIPEINI 1 "SS" 2 HOSTERR
PIPEPUT 1 A$
:LOOP
PIPEGET 1 A$
GOTO A$ == "" LOOP
TESTP A$
PIPECLS 1

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆WINSOCKを使う
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 SOCKINI 1-32 1/2 エラーラベル portno. IP1 IP2 IP3 IP4

1:ホスト 2:クライアント の区別をする
クライアント のみ エラーラベル が有効である。
portno. 指定が無い:内部で2047+n(1-32) をポートNO.とする
portno. 指定が有る:これを をポートNO.とする

IP1 - IP4 はIPアドレスを指定する場合のみ
この時、IP1 の代わりに "PCHOST" や "system-site.co.jp" などとすると
IP指定ではなく、ホスト名を指定したことになる。
ホスト名やIPの指定が無いときは、HOST_NAME=******* の環境変数を使う
SOCKGET 1-32 変数 無しはヌル
SOCKPUT 1-32 変数 エラーラベル
変数の位置に @@****** と書くと ****** というファィルの内容を全て送る
SOCKCLS 1-32

SOCKNAM 1-32 変数(相手名) 変数(IP1) 変数(IP2) 変数(IP3) 変数(IP4) 変数(バージョン)

使い方は、パイプと同様、但し、WIN−95同士で実行可能。


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ディスクパイプ
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
DBUFINI 1-64 変数(レコードサイズ) 変数(MAXREC) ディスクバッファクリア
DBUFGET 1-64 変数 JUMPラベル ディスクバッファ データ GET
DBUFPUT 1-64 変数 ディスクバッファ データ PUT

ディスクファィル位置は 環境変数 DISKBUF = E:

例:送る方

DBUFINI 1 128 128 -- ファィル 消去される
DBUFPUT 1 i

例:受ける方

DBUFINI 1 128 128 -- ファィル 消去される(無くても良い)
:LOOP
DBUFGET 1 A$ LOOP

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆セマフォをセット/リセットする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SEMASET 1-32 変数(タイマ) タイムオーバーラベル

タイマはミリ秒単位

セマフォを要求する
タイマが -1 なら永久待ち

SEMARST 1- 32

セマフォを解放する

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆イベントをセット/リセット/ウエイトする
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

EVNTWAT 1-62 M** 変数(タイマ) タイムオーバーラベル

イベントを待つ
タイマが -1 なら永久待ち

セットされた時にはデータが有効となる。ここでは、プロセス間のデータ渡し
にしか使わない。      共有メモリ id 2 を使う
(SDB_BASE.EXE参照)


EVNTSET 1-62 M**

M**にデータをセットしてから、イベントをセットする
プロセス間のデータ渡しにしか使わない 共有メモリ id 2 を使う
但し、M**が SDB_BASE ならシステム終了イベントをセットする
また、M**が OK なら、データ渡しに使わないでただのイベントセットにする。
ただしこの場合は _****** 命令の(CE_****.SDB)処理に利用しているイベントを減らして使うこと。
たとえば62,61,60,59 を解放して、プロセス間の通信(起動)に使うとか

EVNTRST 1-62

EVNTSET でデータ渡し使わない場合に、イベントをリセットしたい場合に使う。
ただしEVNTSET同様に、_****** 命令の(CE_****.SDB)処理に利用しているイベントを減らして使うこと。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ミューテックスをセット/リセットして、SDB走行占有モードに入る/解放する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

MUTEXIN ID(1-64) LABEL ミューテックスをセットして占有モードに入る
タイムアウトは1分 タイムアウトのラベルを書かなければ、エラーで止まる
MUTEXOUT ID(1-64) ミューテックスをリセットして占有モードを解放する


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆オブジェクト指向のねらいで、処理を別のプロセスに依頼する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

マルチクライアントシステムになると、基本ファィルの排他処理が複雑になったり、
処理の共有化が必要になったりする。
そこで、オブジェクト指向に行き着く。
以下の例のように、システム基本のプロセスをつくり、各クライアントでは、
OBJECT 命令でもって、処理を依頼する。
EVNTSET , EVNTWAT を使って、他のプロセスに処理を頼む
id は PUSH 用 id+1 は POP 用となる
EVNTSET,EVNTWAT は処理する方、これは処理を依頼する方
共有メモリ id 2 を使う アーギュメントは8MAX

 例:基本プロセス

:LOOP
EVNTWAT 1 M10 0 LOOP -- クライアントから処理依頼がくるまで待つ

[その処理内容別に実行する]

HFLCLS ALL -- とりあえず排他が嫌なのですべてCLOSE
EVNTSET 2 M11
GOTO LOOP -- クライアントを起動して戻る。
アーギュメントはM11へ入れる

上の例では、イベントは1,2を使っているが、まだ他にも使うなら、3,4
など、ペアで32まで使える。

 例:クライアントプロセス
   NLMOVE M20
   M20[1] = "品番登録調査"
   M20[2] = C50
   M20[3] = C51
   M20[4] = A$ '品番
   M20[5] = STCAT(C50,"\WK2.DAT")
HFLCLS ALL -- とりあえず排他が嫌なのですべてCLOSE
OBJECT 1 M20          -- 返事が有るまで WAIT 状態
   IF M20[1] == "NO"
   RECOG "" "この品番は登録されていません" ""
   GOTO ERRR
   FI

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆子プロセスを実行する。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

 CHILD シンボル 変数(タイトル) 変数(結果) M**

     シンボル : SSDB , DIET , FPIC , SORT , HYOU , PICK , PIDX , DDIT

  SSDB -- WINSSDB.EXE
DIET -- WINDIET.EXE
FPIC -- WINFPIC.EXE
SORT -- WINSORT.EXE
HYOU -- WINHYOL.EXE
PICK -- WINPICK.EXE
PIDX -- WINPIDX.EXE
DDIT -- WINDDIET.EXE

シンボルは8つ用意して有るが、SSDB と DDIT だけは実際に別起動をしておいて
  内部的にはイベントを利用して起動しています。
  別起動の場合は、SSDBでは/CHILD1を,DDITでは/CHILD8で起動させて
  ください。  A>WINSSDB  /CHILD1 /^SYSLIN リターン
         A>WINDDIET /CHILD8 /^SYSLIN リターン
他のEXEの機能は、WINSSDB.EXEが全てを抱えています。
アーギュメント は最大30個までセットできます。
タイトルはSSDBとDDITにしか有効ではありません。

[SSDBの補足説明]
  本説明書がその説明になります。通常は、1つのEXEで全部の処理を実行したい
  のですが、たとえば定型処理などで、いろいろな場所からそれを利用したいような場合
  など、サブルーチン的にも使えるものです。
   例: M1[1] = "TEST.SDB"
      M1[2] = 1
      M1[3] = N
      M1[4] = アーギュメント-1
      M1[5] = ""
      CHILD SSDB "TITLE" A M1
  以下、他の起動方法も同様の要領です。

  但し、CHILDで呼ばれているSDBの中からCHILD命令は使用できない。
  この場合は EXECPRG を起動させる。
  従って、SDBについては、
  「その走らせるSDBで他のSDBをCHILDすることがあり得ない」
  という場合のみしかCHILDは使用しないという注意が必要になる。
  高速CPUになれば、EXE起動と、待機させている場合の違いは余り気にしない
  方が良いかもしれない。

[DIETの補足説明]
  WIN32版では、複数起動が有り得るのでワークファィル名に注意が必要です。
  ファィルが重ならないように、特に /Wn(テンポラリファイルの差別化(1〜99))、
  /J(作業用ファイルのドライブ)のスイッチに注意を払います。
[FPICの補足説明]
コマンドラインから起動する場合のアーギュメントを示します。
  A>FASTPICK ****.DEF 条件ファィル名 /D入力ファィル名 リターン
  /Dのように SS−DIETで使用できて、ここで意味のあるスイッチは使用可能です。
  [条件ファィル]の内容(シーケンシャルファィル)
  (1行目)1またはファィル名   1:対象とするファィルを読み込む
       ファィル名ならそのファィルを読み込みインデックスとする。
  (2行目)1または2       1:対象とするファィルを出力する。
                   2:インデックスファィルを出力する。
  (3行目)出力ファィル名     最初に削除しておかないと、可否の会話が入ります。
  (4行目)以降、続けて抽出する為の[式]を並べる。
       [式]の構造  Cn m val
          n:フィールド番号1から
          m:>,<,>=,<=,==,!=,{{,}},{}
        val:数値ならそのまま、文字なら””で囲むこと。
   4行目以降[式]を複数行並べても良く、その場合はそれらの条件の論理積(AND)
   を求めていることになります。
      例:C3 != 12   (フィールド3が12でないレコード)
   また、[式]のかわりに
       G** とあれば、抽出後、縦方向の合計をしたいという指示になります。
                **はフィールド番号1からを示し、もし2行目の指示が
                1のタイプなら、実際のデータより1行多いことになります。
                また、2のタイプなら、内部的には「TOTLGYO$.$$$」
                ファィルが作成されます。
       K** とあれば、抽出後、縦方向の合計をし、しかも**のフィールドに
                「合計」という文字をセットしたいという指示になります。
                当然2行目の指示が1のタイプの時のみ意味が有ります。
       Y** f1 f2 ・・ とあれば、抽出後、f1、f2・・を横に合計して、
                フィールド**にデータを保存するという指示になります。
           ここで、f** の記述方法としては F5:12:2
           (5から12まで2つとびに という意味)
[SORTの補足説明]
  アーギュメントは「SS−DIET」の説明を参照してください。
  WINSORTは更に下記の1から4のアーギュメントを先頭に追加しています。
      1 : SS.EXE
      2 : SSR.EXE
      3 : SS_CHK.EXE     キーの重複をしらべるだけ
      4 : SS_INDEX.EXE   インデックスファィルを出力する。
[HYOUの補足説明]
  アーギュメントは「SS−DIET」の説明を参照してください。
[PICKについて]
  WINFPICは、条件式が簡単なものとしてスピードUPをねらったもの、であり、
  WINPICKは、どんな条件式でも受け付けるもの、またWINPIDXは
  そのインデックス版です。アーギュメントはどちらも、(1)定義ファィル(2)計算式
  (3)出力ファィル で、その他に、SS−DIETのスイッチも使えます。
  尚、計算式は””で囲ってください。
  WINDOWS版では、アーギュメントに「END」が無くても、出力後プログラムは
  終了します。
[WINDDIETの追加オプション]
  WINDIETの説明書に追加として、下記のスイッチを説明します。
/Sn      組数   「n行ごとに罫線を入れる」という表になります。
/Y+n     表の上の部分を、n行空けます。
/USr
/UAr     列の属性を操作します。
[電卓]機能が、ファンクションキーに標準でつきました。
/Snと/Y+nの組み合わせは、場合によっては罫線の表示がおかしくなる。
  設定可能な対応表        OK:○ 表示不具合あり:×
[グループ無しの1タイトル表]
Y+1 Y+2 Y+3 Y+4 Y+5 Y+6 Y+7 Y+8 Y+9 Y+10 Y+11 Y+12 Y+13
S1 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ×
S2 ○ ○ ○ ○ × × ○ ○ ○ ○ × × ×
S3 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ×
S4 ○ ○ ○ ○ ○ ○ ○ ○ × × × × ×
S5 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ × × ×

[グループ有りの2タイトル表]
Y+1 Y+2 Y+3 Y+4 Y+5 Y+6 Y+7 Y+8 Y+9 Y+10 Y+11 Y+12 Y+13
S1 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ×
S2 ○ ○ × × ○ ○ ○ ○ ×  ×  ×  × ×
S3 ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ × × ×
S4 ○ ○ ○ ○ ○ ○ × × × × ×  × ×
S5 ○ ○ ○ ○ ○ ○ ○ ○ × × × × ×

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆ファィルをセキュリティ化する/復元する
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

SECUSS 変数(ファィル1) 変数(ファィル2) SEC/CES

SEC : ファィル 1 謎かけて --> ファィル 2
CES : ファィル 1 謎解いて --> ファィル 2

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆パスワードファィルを作成/読出
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

PASWGET 変数(ファィル名) 変数(レコードサイズ) M**

パスワードメンテナンスファィルを読み出す
フィールド区切りは外で考える 漢字混合タイプ
読み出したデータがM**に入る

PASWPUT 変数(ファィル名) 変数(レコードサイズ) M**

パスワードメンテナンスファィルを書き出す
フィールド区切りは外で考える 漢字混合タイプ
M**に入ったデータが書き出される

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆イントラネット用
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

HTMLOUT 1-32 変数(HTMLファィル名)

winsockのidにhtmファィルを出力する。

SSCGI 変数(LINE NO.) SET/WAIT (タイムリミット 秒)

SSCGI.EXEとのやりとりに使う
SET ではなく SETEND なら、イベントをセットした後終了する
(タイムリミット 秒)が無いなら15分がデフォルトでそれを過ぎると、そのラインをリセットする。
(その後でアクセスがくればサーバーエラーとなる)

CGIIN M**(INシンボル) M**(入力値) FLG

SSDB21Nのみ
CGIIN の命令に新モード追加
それに伴い CGIGET 命令 追加
  それまでは M1にシンボルを置いて M2に内容を取っていた
  追加では、M1をヌルにしておけばあるもの全てをM1とM2にペアで取る
それを取りだすのをCGIGETにやらせる
SET,CUTSET,DATE の3タイプあり

CGIOUT 1/2 変数(HTMLコマンド/ファィル名) 1:コマンド 2:ファィル

以下は Ver. WIN32.007 以降の SSDB21.EXE,WEB_SSDB.EXE のみ
HSTART 変数(ファィル名) HTML 書き出し スタート
HT ********** HTML そのまま書き出し
HT のうしろのスペースで無くなった位置以降はそのままファィルに書き出す
HV 変数 (NULL)(ZERO) HTML 変数の内容を書き出す
 ・変数の内容が半角スペースのみなら、あえて全角の1スペースに変換する
(表の内の枠が消えるとまずいことへの対策用)
 ・変数の次に NULL と指定した場合は、もし変数の内容が半角か全角のスペースのみからできているか、
あるいは変数の内容が初めからヌルなら、ヌルで書き込まれる(つまり何も出さない)
(テキストINPUTの初期値をヌルにしたい場合への対策用)
 ・変数の次に ZERO と指定した場合は、もし変数の内容が数値として0ならヌルで書き込まれる(つまり何も出さない)

HT ・・・・・・・・・NAME="カクシID" VALUDE="*****.SDB" のパターンは特殊処理をするので、そのまま書くか、

HV 変数 SDB を使用すること

[その他の HV 特殊仕様]
HV CR CR:0x0d 0x0a を書き出す
HV SPC 半角スペースを書き出す
HV SPACE 全角スペースを書き出す
HV NULL ヌルを書き出す、つまり何も出さない
HV INC 変数(ファィル名) ファィルの内容をそのまま書き出す(例: HV INC "BASE1.HTM")


HV 変数  命令で、特殊文字が変数内に有ったときの考慮が抜けていた

変数の中の以下の文字は、下のように入れ替える */
但し INC は 処理しない

< --> <
> --> >
" --> "
& --> &
本当は スペースは " としたいのだが、今はそのままとする

HV 変数 (TDL,TDR,TDC) 機能追加:
変数が有っても無くても良いが、どこかに TDL TDR TDC の3つのうちどれかがあれば、以下の意味とす。
TDL
TDR
TDC
の意味をもち、それで挟んでくれる。

HC xxxxxxx 数種類のタイプあり
DATE1 : 年月日設定INPUT分  未設定許す
DATE2 : 年月日設定INPUT分  未設定不可
CODE1 : コードセルを持つものに SELECT を使う 先頭の空白あり
CODE2 : コードセルを持つものに SELECT を使う 先頭の空白なし
CODE3,4 : 上の CODE1,CDOE2 に submit_go() を付けたもの
CODE1S,2S,3S,4S : 上の CODE1 -- 4 を作るときに、コードはそのままで、
表示データは小さい順にソートしたもの
CODE3Fn,4Fn,3SFn,4SFn : 上の CODE3,4,3S,4S に更に submit_go(n) を加えたもの
つまり FORM が2つ以上ある時に、submit() したい FORM の番号をいう
順に 0,1,2,・・・ と数えること

HC DATE1 M 1更新 REC!
HC DATE2 空白なし M は万年暦 空白無しは絶対にセットさせる場所に使う
HC CODEn H1[f] C 1所属 REC!
HC CODEnS H1[f] C 1所属 REC!
H1[f] はH変数 C : コード 0,1,2・・・
上で 1更新 や 1所属 は例であり、さらに REC! はもし有れば計算して、その場合の
シンボル名は結合して 1更新21 や 1所属122 などとなる

HEND HTML 書き出し エンド

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆WINDOWSのクリップボードへのread/write
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

CLIPPUT M**

M**を連ねて、クリップボードへテキストを書き込む

CLIPGET M**

クリップボードからのテキストを M**に連ねる */

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆共有メモリのread/write
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

COMPUSH ID 変数(データ) ID = 3,4・・・

共有メモリ(ファィルマッピング)のエリアにデータをセーブする。

COMPOP ID 変数(データ) ID = 3,4・・・

共有メモリ(ファィルマッピング)のエリアからデータをとる。

共有メモリ[ファィルマッピング ID=1]だけは、ファィルが存在すればデータのクリアはしない

(下記 COMSAVE , COMLOAD , COMREAD に係わる)

COMSAVE 変数(シンボル) 変数(データ)

共有メモリ(ファィルマッピング)のエリアに名前付きでデータをセーブする。

COMLOAD 変数(シンボル) 変数(データ)

共有メモリ(ファィルマッピング)のエリアの名前付きデータを取り出す。

COMREAD M**(シンボル) M**(データ)

共有メモリ(ファィルマッピング)のエリアの名前付きデータを全て取り出す。


☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆HELPファィルを作成しておいて、それを表示させる
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

HELP 変数(HELPファィル名)

[HELPファィルの構造]
ヘルプタイトル40バイト + ファィル名8文字 + CR・LF
の1レコードサイズ50バイト固定長のファィルを作成する。
例えば、SS−DIETでは、HELP_MES.HEL 
がデフォルト名
この命令を実行を実行すると、タイトルが表示され、それを選択すると
そのファィルの内容が画面に表示される。
実行した後、画面は汚れない。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
☆郵便番号から住所を調べる、またはその逆を調べる
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

YUBIN 変数(郵便番号または住所) 変数またはM変数 データのある相対パス

郵便番号か住所かは、数値かどうかで区別。だから、郵便番号は−を抜いておく。

該当する住所を返すときに、M**なら複数の住所を返すことができる。

県名は無くても良いが市と町の名前は正確に指定することが必要。

山田町(1〜19番地)  山田町(20〜30番地)などのように、ダウンロードしたテーブルが複数ある場合もある。

***** 郵便番号から住所を取り出す動作の違いについて ******************
YUBIN.SDB で 5970045 を探すと
大阪府貝塚市三ツ松(596、894−1、915−4、925、927−2、932
大阪府貝塚市三ツ松  −4、934〜968、1013−1、1464番地)
が得られるが、
SDB命令 YUBIN "5970045" M10 と書くと
M10[1],[2] には
5970045大阪府貝塚市三ツ松(596、894−1、915−4、925、927−2、932
5970045大阪府貝塚市−4、934〜968、1013−1、1464番地)
が入る
これは、元のデータベースがSDB処理のようになっているから、本プログラムで
あえて、町名をいれてやっている処理である
普通、郵便番号から1つを変換したい場合は複数個は不要だろうということで、
あえてそのままになっていることに注意!

SDB命令 YUBIN "貝塚市水間" M10 と書くと
M10[1] だけに
5970104貝塚市水間   が入るが、
      YUBIN "貝塚市水間451" M10 あるいは
      YUBIN "貝塚市水" M10 と書くと
M10[1],[2] には
5970104貝塚市水間
5970000貝塚市水間[*** その他 ***]
が入ることに注意!!

** この命令を使うには、解析済みの特別なファィルが必要である。 **
** カレントに置かずに指定の相対位置に置くなら指示が必要だ。  **

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
使用可能関数一覧
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

「単」マークは単独で使用し、計算には使えないもの

   A=ABS(−10)などのように、( ) で囲んで使うが、
   アーギュメントは最大3つまでである。

abs : 絶対値
acos : アークコサイン
単 ank : シフトjisをankに
a$ = ank("AA") --> a$ = "AA"
半角2バイト文字は不可     不可の場合はスペースになる
asc : アスキーコード
I = ASC("A") Iは65
asin : アークサイン
atan : アークタンジェント
atan2 : アークタンジェント2
ATAN2(Y,X) Y / X
calcu : 四則演算をする
CALCU("((10+2)*12+1)/3") --> "48.333333" に変換するもの
少数以下いくらまでかは、 SYOSU や ROUND 命令による
式エラーなら "\" を返す
(注) calcu("") も calcu(" ") も "\" を返す
単 c_get : コードセルファィルのデータを取る
C_GET(id , record , 0/1 )
ID は CODOPN で得た ID
レコードNO.(1から)
0:ANK 1:数値(LONG まで)を文字に直す
ceil : 切り上げられた整数値
cos : コサイン
cosh : 双曲線コサイン
単 cut : スペースカット
CUT(A$,1) なら、両端以上にすべてのスペースをカットする
単 datez : その万年暦または本日を全角かつ曜日付きとする
A$ = DATEZ(N) N:万年暦
例えば A$ = "1993年 8月 6日(火)" (28 バイト 固定)となる
ここで、万年暦を書かなければ(ヌルなら)本日を返す
dec : 16進文字列を10進数値(文字列)に変換
A$ = DEC("20FFFFFFFF") --> A$ = 141733920767 となる
HIGH LONG 値 OKとするため「文字型」にした
dtmax : その年月の最大日付(28、29、30、31)を返す
A = DTMAX(N,M) で N は年であり、例えば 93 でも 1993 でも可
M は月を指示し、 1 から 12 の範囲
exp : 指数関数
floor : 切り下げられた整数値
fmod : 浮動小数点の剰余
A = FMOD(Y,X) Y MOD X
単 hanka : 文字列中のANKを半角2バイトシフトJISに
単 hex : 16進文字列に変換 例: A$ = HEX(1024) : A$ = HEX(1023,5)
A$ , B$ の内容は "400" , "003FF" になる
第2アーギュメント有りで、その枠分取る 無しならゼロサプレス
jscmp : 住所とみなす文字列の比較
[基本パターン] A = jscmp("貝塚市三ツ松","貝塚市三ッ松")
A = 0 :一致する = 1 : 不一致と判定した
内部処理として左と右の文字列それぞれを次のように加工している。
「ー」(0x815b) 「―」(0x815c) 「−」(0x817c) は、
−−> 0x815b とみなす
「ぁ」〜「ぉ」(0x829f,0x82a1,0x82a3,0x82a5,0x82a7),「っ」(0x82c1)
「ゃ」(0x82e1),「ゅ」(0x82e3),「ょ」(0x82e5),「ゎ」(0x82ec)
「ァ」〜「ォ」(0x8340,0x8342,0x8344,0x8346,0x8348),「ッ」(0x8362)
「ャ」(0x8383),「ュ」(0x8385),「ョ」(0x8387),「ヮ」(0x838e) は、
−−> プラス1して大文字に変換
「ぁ」(0x829f)〜「み」(0x82dd) は、
−−> 「ァ」(0x8340)〜「ミ」(0x837e) に変換
「む」(0x82de)〜「ん」(0x82f1) は、
−−> 「ム」(0x8380)〜「ン」(0x8393) に変換
「ヵ」(0x8395),「ヶ」(0x8396) は、
−−> 「カ」(0x834a),「ケ」(0x8350) に変換
(ただし、半角の全角への変換はしていないので、外部でやっておくこと)
そして、その上で下記の判定処理をする。
*** 「左の文字列が右に含まれるか?」 ***
(もし左の方が長ければ右のサイズ分を比較する)
[第二パターン] A$ = jscmp("大阪府貝塚市三ツ松","",1)
A$ には "貝塚市三ツ松" が入る
この様に先頭に都道府県名があれば取ってくれる。
[第三パターン] A = jscmp("貝塚市三ツ松451","貝塚市三ッ松451",2)
A = 0 :一致する = 1 : 不一致と判定した
内部処理として左と右の文字列それぞれを次のように加工している。
左右ともに「県名」を取る(有っても必ず先頭に有るとみなしている)
また、比較前に内部で、半角は全角に変換している。
[第四パターン] A = jscmp("貝塚市三ツ松1321","貝塚市三ッ松451",3)
A = 0 :一致する = 1 : 不一致と判定した
内部処理として左と右の文字列それぞれを次のように加工している。
第三パターンの処理と同様とし、さらに「先頭から見て、数値が出た時点でそれ以降をカット」している。
これを使うと番地に関係なく地域として一致しているかどうかに使える。
単 kanak : 漢字とANKの相互変換(濁点まで考慮する)[但し、Ver.4以降で使用可]
A$ = KANAK(0 - 3,0/1,A$)
第一引数 0 : ANKをシフトJISに変換(ANKでないものはそのまま)
第二引数 : = 0 : カタカナ を カタカナに変換する
     1 : カタカナ を ひらがなに変換する
1 : シフトJISをANKに変換(変換不可やANKはそのまま)
第二引数 : = 0 : カタカナ のみ カタカナ に変換する
     1 : ひらがな も カタカナ に変換する
2 : ANKをシフトJISに変換(数字 0 - 9 のみを変換して他はそのままにする)
3 : シフトJISをANKに変換(数字0−9のみを変換して他はそのままにする)
漢字とANKの相互変換では濁点まで考慮するが、半角2バイト文字だは変換できない
単 kjset : 文字列を指定枠内に配置する(全角スペース版)
A$ = MJSET(A$,waku,n) waku : 返して欲しい文字の長さ
n = 1 : 左詰め = 2 : センタリング = 3 : 右詰め
この関数は、空いた部分に 全角スペースを詰める
また、全角文字が切れる場合の処置としては長さが1バイト短くなる
単 kspc : 全角スペースを複数個数発生
A$ = KSPC(5) これで、A$は10バイト
単 lcget : プログラムの起動位置その他のフォルダパスを得る
A$ = LCGET(1)
SSDB21n.exe 起動のドライブ名(E:など 最後の¥ 無し)
同様に引数が 2:SSDB21n.exe 起動のフルパス(E:¥yoyaku 最後の¥ 無し)
3:Systemフォルダ (最後の¥ 無し)
4:テンポラリフォルダ (最後の¥ 無し)
WINDOWSディレクトリやデスクトップのフォルダは ?SIGEN 命令で取る
単 left : 左から指定バイト数をとる
log : 自然対数
log10 : 常用対数
単 lower : 大文字を小文字に
mask : 算術的AND処理
L = MASK(A,4) A を LONGとみた上で、 & 4 を計算する
単 mid : 文字列の何バイトめから何バイトをとる
単 mjset : 文字列を指定枠内に配置する(半角スペース版)
A$ = MJSET(A$,waku,n) waku : 返して欲しい文字の長さ
n = 1 : 左詰め = 2 : センタリング = 3 : 右詰め
この関数は、空いた部分に 半角スペースを詰める
また、全角文字が切れる場合の処置としても半角スペースで埋める
mod : longの剰余
A = MOD(Y,X) Y MOD X
単 moji : 指定文字列の複製
A$ = MOJI("ABC",3) これで A$ は A$ = "ABCABCABC" となる
単 nmchg : 関数で 名前変換函数 株式、有限会社などと略字を変換
(財)を財団法人に (社)を社団法人に (学)を学校法人に
(名)を合名会社に (資)を合資会社に (株) を 株式会社 に (有) を 有限会社 に変換する
A$ = NMCHG(A$,0/1) 2つ目が 1 なら逆方向
(株式会社は に 有限会社は に変換する)
さらに3つ目に1があれば、中の半角と全角のスペース文字を削除する
nmcmp : 名前比較函数 株式、有限などを考慮した比較
(財)を財団法人に (社)を社団法人に (学)を学校法人に(名)を合名会社に
(資)を合資会社に (株) を 株式会社 に (有) を 有限会社 に見立てた上で、名前の一致を見る
A = NMCMP(A$,B$) または A = NMCMP(A$,B$,1)
3つ目が 1 なら 部分一致(A$ の中に B$ の文字列が含まれるか)
元の方が文字列として短くても、その部分が一致していれば「一致」とする
比較の前にすべての空白はカットされる
結果= 0 : 一致 = 1 : 不一致

単 point : 数値文字列を少数点位置を考慮した文字列に変換する
A$ = POINT("123.1",5) --> A$ = "123.10000" となる
pow : べき乗
A = POW(Y,X) Y ^ X
rand : 乱数値を得る
A = RAND(0)
単 replc : 文字列を置き換える
A$ = REPLC("AAAA" , "CC" , "DDDDD" )
AAAA の中の CC を DDDDD に置き換える
単 right : 右から指定バイト数をとる
単 seirk : 西暦年の文字列に直す
アーギュメント ( 95 , 0 ) 95 を 1995 の文字列に直す
87 より上なら19** 下なら20**を
アーギュメント (675 , 1 ) 万年暦 675 を
19yymmdd または 20yymdd にする
単 simes : 締め日の最初の日
アーギュメント (yy , mm , dd )
その日を締め日とした場合の、先月開始日は?
(92 , 03 , 31) なら "920301" が返る
但し、ddが28以上は末締めとみなすので開始日は必ず1日となる
sin : サイン
sinh : 双曲線サイン
space : 文字列がスペースまたはヌルのみなら真(1)
A = SPACE(A$)
単 spc : スペースを複数個数発生
A$ = SPC(5) や LPRINT SPC(12)
sqrt : 平方根
srand : 乱数初期化して最初の値を得る
A = SRAND(1)
単 stcat : 文字列連結
A$ = STCAT(B$,"TEST ",C$)
stlen : 文字の長さ
A = STLEN(A$)
A = STLEN(A$,1) とした場合は、半角全角無視の「文字数」を返します
stloc : 文字検索(前から)
アーギュメント ("aaaa" , start , "bb")
"aaaa" の start より調べてそこよりうしろに文字 "bb" (漢字可)
がある位置は ??? start も結果も1から数える 0 : なし
stlbk : 文字検索(最後にあった位置)
あとは 同上
stnlc : 文字検索(前から)(それでない位置)
アーギュメント ("aaaa" , start , "bb")
"aaaa" の start より調べてそこよりうしろに文字 "bb" (漢字可)
でない文字がある位置は ???
start も結果も1から数える 0 : なし(すべてがその文字である)
stnbk : 文字検索(それでない位置)
あとは 同上
単 str : コードを1文字に
A$ = STR(65) すると A$ = "A"
旧版では STR(1) STR(2) が、新版(WIN32.007以降)では STR(254) STR(255) が使えない
tan : タンジェント
tanh : 双曲線タンジェント
単 tate : 縦書きの為に、文字列中の0から9を〇から九に変換する
       もし A$ = TATE(A$,1) の様に 1 を付けると半角の0−9も同様に変換する
これはエクセルに合わせたもので、「−」(0x817c)を「―」(0x815c)に変換する
エクセルでは、「ー」(0x815b) 「―」(0x815c) 「|」(0x8162)は90度回転してくれる。
だから、半角の - と全角の「−」(0x817c) だけを「―」(0x815c) に変換する
さらに TATE(A$,2) とすると 「ー」(0x815b) 「―」(0x815c) 「−」(0x817c) --> 「|」(0x8162) と変換する
さらに、TATE(A$,3) は TATE(A$,2)と同様で更に半角も変換するものである。
単 time : 現在の日付時刻を yymmddhhmmsssystim でくれる
tosih : 年数差(日付も考慮して)を返す(年齢や年号など用)
T = TOSIH(AAA,BBB) AAA - BBB を計算して何年経っているかを返す
AAA : "" or 0 -> 今日の意味 "yymmdd" or "yy/mm/dd" -> その日付
それ以外で有効な数値なら万年暦とする
BBB : 一応 AAA と同じ解釈にするが通常は「今日」というのは使わない。
従って、結果は0かプラスしかないとし、異常値は−1とする
unin : 文字コード数値を与えると内部表現のUNICODE(4バイト)に変換する
数値を16進で与えるなら unin(0xfcdd) のように 0x を付ける
unout : 内部表現のUNICODE(4バイト)を文字コード数値に変換(10進)
A = UNOUT(A$) A$ = 0xef , 0x80 + 0x40 + 0x20 + high , 0xaabb
aa の第7ビットが1なら0x40 bb の大7ビットが1なら0x20 ORする。0xaabb は第7ビットは必ず1になっている
単 upper : 小文字を大文字に
verno : WINDOWSのバージョンNO.
A = VERNO() A = 不明(-1) WIN32S(1) WIN95,WIN98(2) NT3.51(11) NT4.0(12)
2000(13) XP(14) Vista(15)
単 waku : 文字列がその枠に何文字はいるかを返す
waku(moji,size) 全角・半角を判定する
moji が size 枠に何文字はいるか
結果、下のゲタはく
2バイトか1バイトかではなく半角か全角かである
1000 台:最後の文字も次の文字も半角文字
2000 台:最後の文字が全角 次が半角文字
3000 台:最後の文字が半角 次が全角
4000 台:最後の文字も次の文字も全角
5000 台:はいりきった
単 yobi : 曜日文字列を返す(万年暦を曜日文字列に)
単 zenka : 文字列中のANKを全角2バイトシフトJISに
単 zerop : 数値を枠内右詰め0パック
アーギュメント ( 125 , 4 ) 125 を "0125" にする

CLIP に対して以下の操作を可能にした
単 命令は CLIPM(a1,a2,a3) のみ
a1 : 1 "REPLC" , 33 文字列を置き換える
もし置き換える文字がヌルなら、CLIP 内の UNICODE を chr(253) nnnn chr(253) のように文字コード253 で挟んで UNICODE を10進数であらわす
CLIP 内を一気にリプレースするので、 CLIP サイズは十分にとること。
利用目的は、SSDB内の文字をCSVなどに吐き出すとき、CLIP内で変換して
文字として出し、それをVBScriptでエクセルデータに埋め込むなどに使う。
通常の REPLC 関数には適用していない。(文字長128のこともあるから)
2 "UPPER" , 41 小文字を大文字に
3 "LOWER" , 42 大文字を小文字に
11 "SPACE" , 27 文字列がスペースまたはヌルのみなら真
12 "STLEN" , 26 文字の長さ(,1を付けると「文字数」を返す)
13 "STLOC" , 40 文字検索(前から)
14 "STNLC" , 43 文字検索(前から)(それでない位置)
21 "LEFT" , 45 左から指定バイト数をとる
22 "RIGHT" , 46 右から指定バイト数をとる
23 "MID" , 47 文字列の何バイトめから何バイトをとる
31 "STCUT" , 文字列の何バイトめから何バイトをカットして詰める
32 "STINS" , 文字列の何バイトめから文字列を入れる
33 "STCAT" , 文字列を2つまで後ろにくっつける
41 "STLBK" , 64 文字検索(最後にあった位置)
42 "STNBK" , 65 文字検索(それでない最後の位置)
a2,a3 : 各定義

単 RSGET(1-7) : コンピュータ名などの情報を取る
1 : OS 種別格納文字列 2 : ユーザ名格納文字列 3 : コンピュータ名
4 : ホスト名格納文字列 5 : IP アドレス格納文字列
6 :
A = RSGET(6) 画面の横幅ピクセル値を返す
A = RSGET(6,80) 画面の横幅ピクセル値に80%を掛けて切り捨て
7 :
A = RSGET(7) 画面の縦幅ピクセル値を返す
A = RSGET(7,3.56) 画面の縦幅ピクセル値に3.56%を掛けて切り捨て
6,7 はあくまでも「単独型」であることに注意!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
特殊命令について

  以上の命令の他に、下記の命令が作成可能である。

_aaaaa n M** A−1 A−2 ・・・ A−6

aaaaa:処理依頼先の飛び先ラベル
n:イベント(必ず奇数)[31,29,27・・・]とするが、通常は31のみで充分であろう。
M**:結果をここに受ける
A−1からA−6:処理先に渡すアーギュメント

この命令はあらかじめ起動させた別のプロセスに処理をイベントを使用して依頼するもの。
帰りのイベントは n+1 を使用している。
SDBを読み込み処理し、H変数を準備する無駄を省く目的、あるいはサブルーチンとして使う。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★


★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
 その他全体的な注意事項
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

( 1)SSDBで扱うファィル名の長さは、32バイト最大としていることに注意!。
ドライブ・ディレクトリも含めての長さである。
WINDOWS版では、長い名前のファィルを許しているので注意が必要である。

( 2)文字列長はBASICより短い 128 バイト以内しか扱えないことに注意!
もしそれ以上の文字列を一時的に扱うなら CLIP を使用すること

( 3)SSDBではファィルアクセスルーチンを記述する必要が無い代償として、
その瞬間の同時ファィルオープン数がわかりにくくなっていることから、
CONFIG.SYSのFILES=**では、例えば20とし、あとは
その時開いているH変数などには、個別に注意する。

( 4)文字定数 "****" 文字列の中以外では、 @ と ~ は使用禁止
文字列中の " マークは "" とすること

( 5)文字列の演算について
  変数のタイプにかかわらず +−****.** とスペースの文字だけで構成
  されている場合の四則演算や、大小比較については、数値とみなすようにしてい
  る。従って、便利な反面、例えば "_____"(_はスペースの意味) と
"____0" では、どちらも数値として値0としているから == を実行
すると 真(TRUE)(1) となる。
こんな時、その文字列がオールスペースかどうかには SPACE()関数 を
使う必要がある。
また、文字列の大小比較などは左から1文字ずつ実行する。

( 6)D90からD99は「浮動小数点変数である」
演算や変換の精度は「ROUND」による。

( 7)D**[@@]変数は、宣言時D**[@@][@@]宣言も可能であり、
以後は一時元・二次元どちらでよんでも良い。

( 8)Long/Longの計算の時、「ROUND」によって、小数以下0と指定して
いる時のみ、速い計算をさせている。
それ以外は文字計算をしているので処理速度が遅い。
また、割り算を何回も実行する場合は、「丸め誤差」を意識しなければならない
が、ROUNDをしなければ、割り算の際の小数点は4位切り捨てで3位までを
計算させている。
また、割り算の2値のどちらかでも有効桁が17以上の場合は「浮動小数点計算」
をしている。
また、割り算の除数が被除数より少しだけ大きくて2値の有効桁数が大きい、
かつ指定の小数以下数(ROUND)が大きい場合は、電卓より少し精度が落ちる
こともある。
   例: ROUND 10 0
A$ = 8888888888 / 8888888889
答えは 0.99999999      (電卓だと 0.999999999)
逆に、除数の方が少しだけ小さいと、電卓より精度が良いこともある。
       例: ROUND 10 0
A$ = 8888888888 / 8888888887
答えは 1.0000000001     (電卓だと 1)
いずれにせよ、小数以下の割り算を気にする必要がある場合には、注意して、
ROUNDを必ず指定した方が良い。(デフォルト ROUND 3 0)
ROUNDが 7以上になると、有効桁数の関係で、計算値がオーバーする場合も
あることに注意が必要である。

( 9)H変数は内部で自動OPENをしているが、余りに数が多いと CONFIG.SYS
の「FILES=**」を越えてしまう。
そんな時は、意識的に「FILCLS」を使用してしばらく使わぬものを
CLOSEすること。

(10)H変数への書き込みで、ヌルを埋めた後、WINDIETなどを動かすと、
終了時データのヌルの部分は後ろから削除され、従ってファィルサイズが縮小され
ることに注意。

(11)SSDB動作中にCOPYキーを押すと、「GCOPY1.EXE」を起動するよう
になっている。当然、そのプログラムがディスクに無いといけない。
ただし、WINDOWS版にはその機能は無い。

(12)代入文 A=A+1 などでは、 A++ が許される。但し、A−ZとV変数
のみである。
WINDOWS版では、任意長のLONG値にも許される。

(13)H変数宣言時、[**]のdefファィルが存在しないときはそれを環境変数と
  みて、それに .defをつけて、defファィルとする。

(14)H変数宣言時、[**]の内部がもし[<***>]のパターンである時、***
  は次の意味を持つ。
  このタイプは定義ファィル(***.DEF)不要のH変数だという宣言になる。
  その為にここでレコードの構造を定義するものである。
この場合には必ず対象ファィル名は必要である。

  ****の説明
    Axx:ANKがxxバイト有る  これで1つのフィールド番号を言う
    Kxx: 漢字がxxバイト有る  これで1つのフィールド番号を言う
    Cxx: 混合でxxバイト有る  これで1つのフィールド番号を言う
    Dxx: ダミーでxxバイト有る これで1つのフィールド番号を言う
    Bxx:unsigned char タイプ xxは(注記)
    Ixx:unsigned int タイプ
    Lxx:unsigned long タイプ */
      B,I,Lはxxの数値がフィールド数xx個を意味する
    これらをスペース無しで並べる
だからフィールド番号を数えるのは多くなれば面倒である。
またすべてのxxにおいて省略されれば1とみなす
    Dのフィールドへは書き込めない
   例: VAL H01[][test.dat]
上の例の場合、例えば漢字16バイトのフィールドの番号は1から数えて5
である

(15)代入文の区切りは : とする。
例: A=100 : B=200 : C=3000
   FOR I=1:J=2; J<10; J++:I++

単純に代入する場合以外は使用できないので、余程代入が多い場合にしか使わない
こと。

(16)DEFINE文について

'DEF NUMBR 15

というように、コメントマークに続けてDEFとスペース更に名称とスペース
そして番号を書いて置くと、以下使用される [NUMBR]は全て[15]と
変換されます。
フィールド番号の定義に使えます。但し数値ばかりの名前は不可です。
名称は7文字最大   256エントリーまで
A$=H01[5][NUMBR+3]のようにスペースをいれずに
+**も許します

  例:
VAL H1[TEST.DEF]
'DEF 1住所 1 --> フィールドNO. が 1 である
'DEF 1名前 3 --> フィールドNO. が 3 である

こうしておくと、
A$ = H1[10][1住所] と書いたのと、A$ = H1[10][1] と書くのとでは同じ。
これは、ファィル構造が変更された場合に、フィールド番号がズレたりする
ことに、耐えられるようにしたものである。

(17)***.SDB(プログラムファィル)の存在場所がたとえばRAMディスク
  のような時で、カレントがそこではない時、環境変数[RAMDRV]を
  セットしておけば(SET RAMDRV=E: 等)カレントドライブよりも更に優先的に
  使用するようになっている。

(18)H変数の代入として、例えば H01[I][15] = H02[I][10] という場合、どちらの
  フィールドもANKタイプであったとしてもデータがそのまま移されるとは限ら
  ないことに注意 !。
  例えば、H01 のアクションタイプが[右詰め]、 H02 が[そのまま編集]であ
  った場合、 H02 を取り出して両端のスペースをカットし、右詰めにして代入し
  ている。

(19)システム定義数値について
  もし、ファィル DEFINETB.SYSにシンボル定義があれば、
  システム全体の定義情報とする。

例:    ループ      "1000"    うしろはコメント
      ループ1      "500"

 とあるとプログラムで

  FOR I = 1; I <= "゜ループ"; I++ は   FOR I = 1; I <= 1000; I++
  FOR I = 1; I <= "゜ループ1"; I++ は   FOR I = 1; I <= 500; I++
のことである。

H1["゜住所"] なども ok ゜ はカタカナのマル

(20)ファィルの排他について

・命令[DIET]でファィルの排他にひっかかるもの
     対象とするファィルを最後に書き込むとき
・シーケンシャルファィルアクセス
     3種とも ファィルの排他にひっかかる
・クリップファィルのオープン
     ファィルの排他にひっかかる
・命令[?FILNAM]は結果を書き込むファィルが排他にひっかかる
・命令[FRECMNT]の対象ファィルが排他にひっかかる
・ディスクバッファ関係が排他にひっかかる
・命令[CHILD]が排他にひっかかる
・命令[HYOUTL]関係では 1.TMP への書き込みが排他にひっかかる
・命令[RSFRD]関係が排他にひっかかる
・コードセル関係
  命令[CODINI]で書き込み可となっていなければ問題なし
  なっていれば、[CODEND]の時のみ排他にひっかかる
・命令[READONLY]によって R/W OPENを R OPEN
 にできるもの
MOVE 命令 , SEARCH 命令 , TSUM 命令 , CODOPN 命令
NLMOVE 命令 , H変数の読み書き

(21)文字属性について
PC−9801仕様のキャラクタ属性の説明をしておかないと、キャラクタ文字
の色などの属性を設定することが出来ません。
PC−9801の場合 1,2,3,4,5,6,7,8 の8ビットの先頭3ビット(1,2,3)で
色NO.を示します。(0:黒 1:青 2:赤 3:紫 4:緑 5:シアン 6:黄 7:白)
通常の文字はビット8を1にして4から7を0にします。
例:シアンなら16進数表現で 0xA1 となります。
それに加えて、ビット 7:ブリンク 6:リバース機能  5:アンダーライン機能
があると考えて下さい。4は常に0としておいて下さい。
但し、WINDOWS版ではブリンクはありません。
(22)WINDOWS版だけはインクルードファィルが使えます。
  #INC ファィル名( " " では囲まないこと)
  と書けば、そのファィルを挿入することができますが、ネスティングは不可です。
(23)「環境設定」で変則的な規則があります。
(1)SSDB.EXEと同じディレクトリに SSDB.INI があればそれを
(2)シーケンシャルファィル動じOPEN数を指定するアーギュメントのところで、それが2文字以上で存在するファィル名なら
そのファィルには次のものが入っているとみなす
・MAXファィルOPEN数
・aaaa=bbbbb  aaaa:環境変数   bbbb:内容
・  これが続く
・命令 GETENV では、先にこの登録テーブルを探すこととする
・先頭に;があればコメント行


★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
[SS−DIET機能説明]
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
SS−DIETという名称は、WIN32版でWINDIETとなり、Ver.5版
ではWINDDIETという名称になっています。
ここでの説明は、MS−DOS版の「説明書」を引用し追記したものである為、これまでの
説明のイメージと少し違っていたり、MS−DOS専用の記述があったりするかもしれません。

               [目次]

[はじめに]SS−DIETとは
[第1章] SS−DIETの取扱うファイルは、
[第2章] レコード内の各データの説明
[第3章] SS−DIETの基本システム構成
[第4章] SS−DIETのコードセレクタとは
[第5章] SS−DIETのディスクリンクとは
[第6章] レコードNO.ソースのディスクリンクとは
[第7章] よく使用する文字列の登録について
[第8章] その他、表示上・操作上での補足説明
[第9章] ファンクションキーの機能説明
[第10章] プログラムの起動方法とプログラム名
[第11章]SS−DIETの計算機能
[第12章]SS−DIETの「抽出」機能
[第13章]その他のデータベース操作ツール
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[はじめに]SS−DIETとは

 表形式のデータベースシステムを簡単に定義、かつデータ入力ができるツールです。
 ・データ入力がし易いことと
 ・レコードの構造が自明なことによる他のデータベースとの相性の良さ
 ・豊富な標準機能により、簡単にデータ加工や検索ができること
 ・一般的なプログラム言語やインタプリタ言語「SSDB」によるデータ操作が
  し易いこと
           を特徴としています。

まずは操作をしてみて下さい。

   A>WINDINI リターン (WINDOWS版)

   A>DIETINI リターン (MS−DOS版)

               で、表定義プログラムの起動です。

     表定義ファィル名は xxxx.DEFとして下さい。
     水平罫線と連続行番号をとりあえず「あり」と設定し、あとはデフォルトの
     ままで[次ページ]に移り、3行程フィールドを定義して下さい。
     列名を適当に入力し、枠サイズを16、列タイプをNO.12の「漢字混合
     文字列」と設定してみて下さい。あとはリターンキーばかりで良いです。
     その次のページはそのまま何も入力せず、最後のページでファンクションキ
     ーを[標準]に設定し、次ページへ移ると、一番最初のページです。
     終了して下さい。

   A>WINDIET  xxxx.DEF リターン(WINDOWS版)

   A>HEXEC_V4 xxxx.DEF リターン(MS−DOS版)

        でデータ入力が可能です。

   ただし、Ver.4のWINDOWS版はSSDBに取り込んでありますので、単独起動は
   不要です。(SSDB命令のCHILD命令で起動できます)
   実行可能な機能はすべて、ファンクションキーにある通りです。

   最大行数 約21憶、最大ファィルサイズは 約260メガバイト
   削除記憶エリア 約16Kバイトまで
   以下ではファィル中の「レコード」をあるいは「行」と呼んだり、「フィールド」の
   ことを「列」と呼んだりします。
   また、プログラミング経験の無い方には、少し読み辛い用語が出てきますが、悪しからず。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
[第1章] SS−DIETの取扱うファイルは、

 ┌────────────────────────┐
 │ 「1レードのサイズが[固定長]であること」  │
 └────────────────────────┘を基本とします。

その上で次の2タイプのファイルを扱います。

 (1)すべてのフィールドが、以下で説明するタイプのデータ(文字、バイナリ
    データ混在も可能)で構成されているもの
       −−− これを「ランダムファイル」と呼ぶことにします。

      Fld.:フィールド
     ┌────┬───────┬──────┬────────┐
     │Fld.│Fld.   │Fld.  │Fld.    │
     │  1 │   2   │   3  │    4   │
     └────┴───────┴──────┴────────┘
               1 レコード

 (2)半角/全角のいわゆる文字コードの羅列と、最後に終端記号(CR・LF)の付いた
    もの  −−− これを「シーケンシャルファイル」と呼ぶことにします。
            この場合、操作者は終端記号を意識する必要はありません。
           (CR・LF : 16進数表現で 0D・0A のもの)
   このファイルは、終端記号をも2バイトのデータとみなすことにより、
   (1)と同じタイプのファイルであるとみることもできます。
      また、「シーケンシャルファイル」とみる、つまり、終端記号はシステム
      側に管理させるという場合は、更にファイルの最後にEOF(16進数で
      1A )が付く場合と付かない場合を区別できます。

     ┌────┬───────┬──────┬──────┬──┐
     │Fld.│Fld.   │Fld.  │Fld.  │CR│
     │  1 │    2  │   3  │    4 │LF│
     └────┴───────┴──────┴──────┴──┘
               1 レコード

 換言すれば、取り扱い不可能なファイルとは、文字列と終端記号より構成される
       ============
 「可変長のシーケンシャルファイル」ということになります。
  ===============

 こういうファイルは、各レコードにスペースを付加して最大長のレコードにサイズを
 合わせることにより、SS−DIETの操作対象となり得ます。

 また、インデックス付きファィルでは、その構造が判っているものであればそのイン
 デックス部とデータ部それぞれを対象とすることで、操作することは可能ですが、そ
 うでない場合や固定長でない部分がある場合などは前に述べましたように、対象外と
 なります。


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第2章] レコード内の各データの説明

 1レコード内のデータは「フィールド」に区切られています。
 (フィールド・項・セル・エレメントなど種々の呼び方がありますが。)

 ◆フィールドのデータタイプ◆
                 としては下記のタイプが設定可能です

  (1)1バイトで −128から127の数値を表す(charと表現)
(2)1バイトで 0から255の数値を表す(u_charと表現)
(3)2バイトで −32768から32767の数値を表す(intと表現)
(4)2バイトで 0から65535の数値を表す(u_intと表現)
(5)4バイトで −2147483648から2147483647の
                  数値を表す(longと表現)
(6)4バイトで 0から4294967295の数値を表す
                     (u_longと表現)
(7)日付データ YY/MM/DD表現で日付を表す(87/01/01を1と
         する万年暦に内部変換するので物理的なサイズは2バイト)
(8)日付データ YYMMDD表現で日付を表す(870101を1とする万年
         暦に内部変換するので物理的なサイズは2バイト)
(9)MONEY ***,***,*** 表現で金額を表す
         (内部表現は上記(5)と同じ4バイト整数)
(10)ANK文字列
(11)漢字文字列
(12)漢字/ANK混合文字列
(13)high long MONEY ***,***,*** 表現で金額を表す
                     (内部表現は8バイト整数)
(14)****.* 小数点以下1桁表現(内部表現は上記(5)と同じであるが、
        実際の値はそれを10で割ったものとなる)
(15)***.** 小数点以下2桁表現(内部表現は上記(5)と同じであるが、
        実際の値はそれを100で割ったものとなる)
(16)**.*** 小数点以下3桁表現(内部表現は上記(5)と同じであるが、
        実際の値はそれを1000で割ったものとなる)
(17)****.* high long 小数点以下1桁(内部表現は8バイト
        の整数であるが、実際の値はそれを10で割ったものとなる)
(18)***.** high long 小数点以下2桁(内部表現は8バイト
        の整数であるが、実際の値はそれを100で割ったものとなる)
(19)**.*** high long 小数点以下3桁(内部表現は8バイト
        の整数であるが、実際の値はそれを1000で割ったものとなる)
  (20)BASICで作成した単精度実数型(整数値のみサポート)
  (21)BASICで作成した倍精度実数型(整数値のみサポート)
  (22)時刻タイプ 24時間(HH:MM)をその表現のまま整数としたもの

   以上のデータタイプに合致しないものは、どれかのタイプにあわせて使用して下
   さい。

   また、データタイプのほかにそのデータを入力する場合の動作を指定することが
   でき、「アクションタイプ」と呼びます。

 ◆フィールドのアクションタイプ◆
                 としては下記のタイプが設定可能です

 (1)電卓入力のように入力数値が右から表示され、入力後右詰め表示されるもの
  (2)入力枠内において、左詰めで入力し入力後右詰め表示される。
     おもに、バイナリやANKタイプの数値入力に使用します。
     金額(カンマ付き)タイプや日付タイプのデータ入力もこれを使用し、
     カンマ(,)やスラッシュ(/)は省いて入力し、表示はそれらを付けた
     状態で表示されます。
  (3)入力枠内において入力されたままの形で入るタイプです。
     ANKや漢字文字の入力に使用します。
  (4)画面上に表示はするが、入力ができないタイプです。
     後述する計算結果をここに自動入力したり、特別なアプリケーション
     プログラムから直接データを設定したりして、表示されるものです。
  (5)このフィールドは表示しないという設定です。
      後述するコードセレクタのコード欄や未使用エリアの定義などです。
  (6)「仮想表示」と表現し、後述しますがコードにより他のファィル上の
     データを持ってきたものであるため対象とするデータファィル上には
     コード以外存在しないものです。
  (7)上記(1)のタイプと同様ですが、データの値が0の場合はブランク
     を表示するものです。
  (8)上記(2)のタイプと同様ですが、データの値が0の場合はブランク
     を表示するものです。
  (9)上記(4)のタイプと同様ですが、データの値が0の場合はブランク
     を表示するものです。

  後述するコードセレクタのコードの部分がANKタイプである場合のみ、そのコー
  ドの表現は入力枠サイズに応じて先頭に0の付く表示(例:入力枠が4カラムでデ
  ータが12なら0012)となります。


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第3章] SS−DIETの基本システム構成

 基本的な構成は次の4つのプログラム群から成ります。

 (1)タイトル・入力枠・データタイプなどを定義するプログラム
     会話的に諸設定が可能です。この操作により、定義ファィル(ファィル名は
     ***.DEF)が作成されます。     [DIETINI]
                          [DIETPRN]
 (2)実データを入力するプログラム
     対象ファイル内にデータを埋めていく時、画面上で罫線やタイトルが表示さ
     れますので入力し易くなっています。    [HEXEC_V4]
                          [DIET_V4]
 (3)データベース操作用簡易言語インタプリタ
     BASICまたはC言語ライクな簡易言語をインタプリタ方式で、実行しま
     す。データファィルの定義は前述したように外部でなされていますので、フ
     ァィルアクセスルーチンの記述をすることなしに、直接データにアクセスす
     ることができます。ディスク上のファィルがそのまま1プログラム変数とし
     て記述できるのです。           [SSDB]
     (SSDBシステムとして、説明書が他にあります)
 (4)その他、ユーティリティとしてシステム構築用に有効なプログラムを並べてあ
     ります。

 以後、対象ファイルを操作するにあたり、このDEFファイルを利用します。
 従って、もし構造が同じであれば1つのDEFファイルで済ませることができますし
 、逆に1つのファイルを対象にする場合でも、例えばマスターファイルなどのように
 大きなレコードを処理する場合などは、種々の組み合わせ画面を定義することが可能
 です。

            対象ファイル 1 レコード  物理的配置
   ┌────┬───┬───┬───┬─────┬─────┬────
   │(1) │(2)│(3)│(4)│(5)  │(6)  │(7) 
   └────┴───┴───┴───┴─────┴─────┴────


┌─┐┌─────┬────────────┬─────┬────────
│画││     │   仕   様    │     │   使  
│面│├─────┼────┬───┬───┼─────┼───┬────
│イ││ 品 名 │ 定 格│メーカ│部 門│ 価 格 │形 態│実 
│メ│├─────┼────┼───┼───┼─────┼───┼────
│|││ (3) │(1) │(4)│(5)│(2)  │(7)│(6)
│ジ│├─────┼────┼───┼───┼─────┼───┼────
└─┘│     │    │   │   │     │   │  

 上図は、実際の対象ファィルの各フィールドが画面上の任意の場所にもってくること
 ができるということを示した図です。
 繰り返しになりますが、1つの対象とするデータファィルに対して複数種類の画面イ
 メージを定義できたり、1つの定義に対して同じイメージなら複数のデータファィル
 を操作することが可能なのです。

   [フィールド数の制限         −− 横方向に256個 ]
   [1つのフィールドの画面上での幅制限 −− 半角64文字   ]
   [1つのレコード長の制限       −− 8Kバイト    ]
   [1つのファィルのレコード数の制限  −− 約20憶レコード ]

┌──────────────────────────────────┐
│            基本システム構成              │
│                                  │
│  ┌─────────┐                     │
│  │         │                     │
│  │ 表定義プログラム│−−>(1)               │
│  │ DIETINI │                     │
│  └─────────┘           ┌───────┐ │
│  ┌─────────┐     (1)−−>│定義ファィル │ │
│  │         │<−−(2)<−−−−│***.DEF│ │
│  │ 入力プログラム │           └───────┘ │
│  │  HEXEC  │−−>(3)               │
│  └─────────┘           ┌───────┐ │
│  ┌─────────┐     (3)−−>│データファィル│ │
│  │DB操作用簡易言語│<−−(4)<−−−−│***.DAT│ │
│  │ インタプリタ  │<−−(2)     └───────┘ │
│  │  SSDB   │−−>(5)               │
│  └─────────┘           ┌───────┐ │
│  ┌─────────┐     (5)−−>│抽出ファィル │ │
│  │ その他のツール │           │***.DAT│ │
│  │         │           └───────┘ │
│  └─────────┘                     │
└──────────────────────────────────┘


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第4章] SS−DIETのコードセレクタとは

 上で述べました様に1ファイルの任意フィールドを対象とし、しかも表示の順序が任
 意であることを基本としますが、さらに、あるフィールドに設定されているバイナリ
 データをキーとして、他のファイルのデータを取りだし、それを表示することも可能
 です。
 ここでいうキーとはインデックスファィルでいうキーではなく、そのバイナリの数値
 が単純に他のランダムファィルのレコード番号を指すものです。

            参照されるファイル 全体
    ┌────┬────┬────┬────────────┬────┐
    │DATA│DATA│DATA│            │    │
    │  1 │  2 │  3 │  ・・・・・・・・  │    │
    └────┴────┴────┴────────────┴────┘
    レコード1 レコード2  3
                ↑   ここを指す3という値が入っている
                └−−┐
                   |
  ┌──────┬──────┬────┬─     ───────┐
  │フィールド │フィールド │コード │             │
  │    1 │    2 │[3] │  ・・・        │
  └──────┴──────┴────┴─     ───────┘
          対象データファイルの 1 レコード

 こういう場合、対象ファイル上の実データと表示エリアとの関係は以下の様になりま
 す。

      [ ファイル上に実データが存在・・? ]

     する     する  する    しない      する ・・
      |      |   |     |        |
      |      |   |     |        |
   ┌──────┬──────────────────┬──────
   │      │   仕      様       │   使  
   ├──────┼────┬───┬─────────┼───┬──
   │ 品 名  │定 格 │コード│ メ ー カ 名 │形 態│実 
   ├──────┼────┼───┼─────────┼───┼──
   │      │    │   │上の例のDATA3│   │  
   ├──────┼────┼───┼─────────┼───┼──
   │      │    │   │が表示されます  │   │  
   ├──────┼────┼───┼─────────┼───┼──

 コードによって他のファィルのデータをもってきて表示するということですが、では
 何故「コードセレクタ」と呼ぶかといいますと、他のファィル上にある全ての表示デ
 ータを縦に並べて、操作中の表の上にウィンドゥとして表示し、選択キーによりコー
 ドを覚える必要なく選択できるからです。
 この「他のファィル」の構造により、2つのタイプがあります。
  (1)ファイル全体がウィンドゥに並ぶ、つまり、1レコードが文字型の1フィー
     ルドであるようなタイプのファィルの場合。
  (2)あるファィルの複数フィールドのうち、1フィールドだけをウィンドゥに並
     べる場合。
 どちらにしろ、数値で直接呼び出すことも可能ですし、ウィンドゥを表示させて直接
 データを指示することにより選択することもできます。
 また、ウィンドゥに表示されているデータを検索して目的のデータを探すこともでき
 ます。
 また、前者のタイプの場合はテーブルファイルの追加・変更もその場で実行すること
 ができます。また、コード自体は表示しても<隠しておいても構いません。
 ここで、コードによって取ってこられるデータは[必ず文字タイプである]必要があ
 ります。
 補足ですが、コードセレクタのウィンドゥにてコードのデータ一覧をするとき、エン
 トリー番号が表示されますが、この番号を消去することも指定により可能です。

 さらに Ver4 では [コードの階層構造](親子関係と呼びます)をサポート
 しました。
 例えば、各顧客ごとに住んでいる都道府県名のみ設定したい場合があったとします。
 単純な表を考えるなら、使用する都道府県名を別のファィルに並べておけば良いので
 すが、ここでコードセレクタの階層化を利用して、まずは「関東地方」「近畿地方」
 などのような地方名を選択させて、それが選ばれた時にその地方に所属する都道府県
 名のみをウィンドゥで選ばせた方がはるかに使い易いということは容易に考えられる
 事でしょう。
 こういう場合の為に、[階層構造]をサポートしました。
 設定方法は、上位の階層(親と呼ぶ)のファィル名と同じものを下位の階層(子と呼
 ぶ)に付けて、但し拡張子を ***.DAC とします。
 定義プログラム[DIETINI]では、これに関係するページは、第4画面目の
 「コードセレクタソース」だけです。親コードセレクタのデータファイル名と、子のデータファイル名は、拡張子
 以外は(パス名も)同じにして下さい。
 親の拡張子は制限ありませんが、子の方は必ず、".DAC"として下さい。
 親のコードセレクタソース設定は、通常のコードセレクタとなんら変わるところがありません。
 [設定の制限事項]・上記1のタイプのファィルとして下さい。
          ・ソート指定はできません。
          ・親を必ず、子の手前(表示順)に存在させます。
 [ファィル構造のイメージ]

         [ 親 ]           [ 子 ]

     XXXXXXXXYYYY ───── ZZZZZZ
     XXXXXXXXYYYY ─┐    ZZZZZZ
     XXXXXXXXYYYY ┐│    スペース
         ・        │└─── ZZZZZZ
         ・        │     ZZZZZZ
                  │     ZZZZZZ
                  │       スペース
                  └──── ZZZZZZ
                           ・
                           ・
         XXXX:親の文字列
         YYYY:子のファィル上のポインタ(0から)を指す数字列
         ZZZZ:子の文字列



■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第5章] SS−DIETのディスクリンクとは

 前章と同様にコード(レコード番号)より他のファィルのデータをもってきて、表示
 するものですが、コードセレクタの様にその内容を表示させて選択するという方法は
 取らずに、例えばコードセレクタを使用して目的とするコードが決定された場合、そ
 のコードをもとに更に別ファィルのデータを表示したいという場合などに、「ディス
 クリンク」機能を使用します。
 例を示しますと、相手先を決定する時にコードセレクタを使用して「読み仮名」の一
 覧からある人を選び、そのコード(レコード番号)を基にマスターファィルから「住
 所」「電話番号」などを自動的に取ってきて自動表示したいという場合がそうです。
 またこのことから、表示されるデータタイプはどういうタイプのものであっても良く
 、文字型である必要はありません。
 また、コードセレクタと同様にコード自体は実エリア上に存在しさえすれば良く、必
 ずしも表示されている必要はありません。

 コードセレクタとの違いを繰り返しますと、

 「コードセレクタを使用する必要がある場合とは、コードを決定するための手段とし
  てウィンドゥを利用したいような時ですが、ディスリンクは手入力やウィンドゥに
  よって決定されたコードを基に表示をするだけのものです。
  コードが決められるとそれをもとに別ファィルのデータを自動表示させるという点
  ではどちらも動作は同じです」


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第6章] レコードNO.ソースのディスクリンクとは

 データベースシステムのファィル設計をする上で、ある2つのファィルのレコード順
 が同じ意味のデータである場合ということが多くあります。
 例えば顧客マスターファィルを何らかの理由で2つに分割し、「名前ファィル」と「
 住所ファィル」の2つに分けた場合、そのレコード順序はどちらも[顧客登録順]に
 並んでいることになります。
 そういう場合は前述しましたコードによる選択はむしろ邪魔になり、一方のファィル
 のあるフィールドを自動的に該当するレコードのところへ表示したいということが発
 生します。
 そんな時の為に、「レコードNO.をソースとするディスクリンク」という機能も用
 意してあります。

 次の例を参照して下さい。Aファィルのレコードの意味と、Bファィルのレコードの
 登録順の意味あいが同じであるとし、Bファィルの(1)(2)(3)にデータ入力
 する時に、(ア)(イ)の項目が同じ表に表示されていれば入力上で非常に役に立つ
 と仮定します。

  ┌────┬─────┐    ┌───┬─────┬─────┐
  │(ア) │ (イ) │    │(1)│ (2) │ (3) │
  ├────┼─────┤    ├───┼─────┼─────┤
  │    │     │    │   │     │     │
                                    

     [Aファィル]            [Bファィル]

    ┌──────┬─────┬───┬─────┬──────┬─
    │ (3)  │ (イ) │(1)│ (2) │      │ 
    ├──────┼─────┼───┼─────┼──────┼─
    │      │     │   │     │      │ 
    ├──────┼─────┼───┼─────┼──────┼─

         [Bファィル操作時の画面イメージ]

 ここで、Bファィルの(1)から(3)は実際にデータが存在するのですが、Aファ
 ィルの(イ)データは「仮想表示」として登録され、画面上ではそこに有るかのよう
 に見えますが、実際はAファィルから取ってきて表示しています。
 これがレコードNO.ソースのディスクリンクです。


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第7章] よく使用する文字列の登録について

 前述しましたコードによる選択と似ていますが、たとえコード化(データファィルに
 そのコードを記憶させること)しなくても、よく使用する文字というのは登録してお
 いて後々使いたいものです。
 例えば、「メモ」や「住所」などというフィールドがあったとして、一度あるファイ
 ルに住所などを登録しておくと、別の人の住所を入力する時にそれらの中から選択す
 ることができれば、同じ文字を入力する手間が省けるというものです。
 その為、[コード管理はしないが文字列を登録しておける]仕組みも用意しました。

  │          │                     │
  │  住  所 1  │      住   所  2       │
  ├──────────┼─────────────────────┤
  │大阪府貝塚市    │                     │
  ├──────────┼─────────────────────┤
  │大阪府貝塚市    │                     │
  ├──────────┼─────────────────────┤
  │大阪府貝塚市    │                     │
                                    
    共通の文字列

 この登録先はもちろん他のファィルになりますが、コードセレクタと同様にその構造
 により、2つのタイプがあります。
  (1)ファイル全体をプログラム起動時にメインメモリ上に置く場合。
  (2)あるファィルの1フィールドについて、全データをメインメモリ上に置く場
     合。
 どちらにしろ、数値で直接呼び出すことも可能ですし、ウィンドゥを表示させて直接
 データを指示することにより選択することもできます。
 また、ウィンドゥに表示されているデータを検索して目的のデータを探すこともでき
 ます。
 現在のところ、メインメモリ上に置く1つのファィルは64Kバイト以下であること
 の制限は付いています。また、前者のタイプの場合はテーブルファイルの追加・変更
 もその場で実行することができます。
 繰り返しますが、ここでデータを選択した場合はコード(レコード番号)を対象ファ
 ィルにセットするのではなく、そのコードによって他のファィルからもってこられた
 [文字列]をセットします。従ってセットした後はそのコードが幾つであったかは一
 切わかりません。また、文字列をセットされるそのフィールドは当然[文字]タイプ
 である必要があります。


[重要な注意]

  ◎コードだけをデータファィルに記憶させることのメリットは

   「記憶サイズの縮小」 です。

   (特にSS−DIETはバイナリコードをサポートするのでより縮小されます)

   逆に大きなデメリットがあります。

   「コード表の内容を不用意に変更すると全データに影響する」 です。

   (例えば コード1を「貝塚市」から「岸和田市」に不用意に変更すると、
    その瞬間から、登録コード内容が既に1であった貝塚市住民が一瞬にして
    岸和田市住民になってしまうということです)

  ◎コードを利用せずにそのままのデータを記憶させることのメリット・デメリット
   は上記のことの全く逆です。



■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第8章] その他、表示上・操作上での補足説明

 上段に表示される各フィールド毎のタイトルは、グループ化して2段に表示すること
 が可能です。

   ┌──────┬──────────────────┬─────
   │      │   仕      様       │  使  
   ├──────┼────┬───┬─────────┼───┬─
   │ 品 名  │定  格│コード│ メ ー カ 名 │形 態│実 
   ├──────┼────┼───┼─────────┼───┼─
   │      │    │   │         │   │  
   ├──────┼────┼───┼─────────┼───┼─

 表は画面をはみ出す場合、上下左右にスクロールしますが、左端から指定個数のフィ
 ールドについては固定して表示することも可能です。
 また、データが上下方向にスクロールしても、タイトルは固定して表示されます。

 [枠幅の変更]
   SS−DIETは「固定長レコードを扱うデータベースソフト」ですが、表示上
   は枠幅を可変にすることができます。(ファンクションキーの機能一覧参照)
   表示幅が実際のデータサイズより小さい場合は、データ入力時に表示枠が黄色に
   なることで分かります。

 [データの確定]
   データのみキー入力をして、例えば → キーをおすと、データは確実に入力さ
   れ、しかもカーソルが1つ右に移ります。つまり、都度リターンキーを押す必要
   がありません。逆に、ミスによってデータが変更されて、もしそれに気付かない
   と大変なことになるという場面も存在するでしょう。こんな時は、シフトキーを
   押しながら1度だけ、リターンキーを押します。すると入力枠が白色で囲まれて
   以後、データとリターンキーを押して初めてデータが更新されるというモードに
   なります。(リターン入力モード)
   もとに戻すにはもう一度シフトキーとリターンキーを押して下さい。
   また、どんな場合でもデータ入力の途中でESCキーを押すと、変更前の内容に
   戻ります。
   また、入力枠内でのカーソルの移動はシフトキーを押しながら矢印キーを押して
   下さい。


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第9章] ファンクションキーの機能説明

 SS−DIETでは諸機能をファンクションキーに持たせていて、その配置は簡単に
 変更することができます。(ファィル定義操作によります)

 以下にその機能を説明します。

  [@↓↓][A↓↓][B↓↓][C↓↓]
  「左端」−−−カーソルを左端のフィールドに移動します。
  「右端」−−−カーソルを右端のフィールドに移動します。
  「先頭行」−−カーソルを最初の行に移動します。(全行表の場合)
  「先頭頁」−−カーソルを最初の頁に移動します。(一行表の場合)
  「最終行」−−カーソルを最後の行に移動します。(全行表の場合)
  「最終頁」−−カーソルを最後の頁に移動します。(一行表の場合)
  「ジャンプ」−カーソルを指定の行に移動します。
  「上複写」−−そのフィールドの1つ上のレコードの内容をコピーします。
  「行複写」−−その1つ上のレコードの内容を全フィールド分コピーします。
         安全の為、現在行に何もデータが入力されていない場合だけ、
         実行されます。
  「印刷」−−−行範囲を会話して、内容を印刷します。
  「終了」−−−データを更新し、終了します。
  「記憶」−−−カレントフィールドの内容を記憶しておきます。
  「貼付け」−−「記憶」で取り込まれたデータをフィールドにセットします。
  「行削除」−−その行の情報を全て削除します。
         会話時、スペースキーを押すことにより、削除は実行せず、指定行
         の情報を記憶するという機能を持ちます。
  「行復帰」−−「行削除」で削除されたデータあるいは指定されて記憶中のデータ
         を現在の行の前に挿入します。
  「行挿入」−−現在の行の前に空白データの行を挿入します。
  「検索」−−−検索データを会話することにより、該当行を瞬時に捜します。
  「罫線」−−−「横罫線表示モード」と「データ詰め表示」モードを切り替えます
         「データ詰め表示」とは横罫線を表示させず、その分データ表示量
         を多くしたものです。
  「一行表」−−[全行表]表示の場合に現在カーソルが点滅している行の情報のみ
         を1画面上に展開します。横方向に長い場合、1レコードの情報を
         一度に眺めるのに便利です。
  「全行表」−−[一行表]表示の場合に[全行表]表示にします。
  「モード替」−−「入力モード」と「表示モード」を交互に切り替えます。
         「表示モード」にすると、フィールド内はアンダーライン付きのデ
         ータ表示となり、データの変更はできません。
         入力モード時はカーソルが「入力可能なフィールド」上にしか停止
         しませんので、例えば入力不可のフィールドが続いているとその部
         分が見られないということも起こります。そのような場合には「表
         示モード」にします。
  「抽出」 −−後述する方法により(定義ファィルと同名で拡張子がSELのもの
         )テーブル設定をしておくと、条件に合致するレコードやあるフィ
         ールドをソートした結果を一時ファイルにいれ、それを見ることが
         できます。
         例えば、「名前のあいうえお順に一時ならべかえてみる」とか「年
         齢が50才以上の客についてのデータを取り出す」などの時などに
         使えます。
  「復帰」 −−[抽出]モード中に、元の表に戻るのに使用します。
  「表隠し」−−任意のフィールドエリアを画面上から消去することができます。
         もちろんファィル上では実際のデータは存在します。
         一時的に邪魔になるフィールドを視野から外してくれますので、デ
         ータ入力の効率が上がります。
  「表復帰」−−隠されたフィールドを全て最初にみることのできた状態に戻します
  「表登録」−−任意のフィールドを隠した状態にタイトルを新たに付け直しその状
         態を登録しておくことができます。これによって、ファィル定義フ
         ァィルを新規につくることなしに、入力パターンの違ったものをつ
         くることができます。
  「表選択」−−あらかじめ「表登録」で登録しておいた入力パターンを、データ入
         力時にプログラムを再度起動することなしに変更することができま
         す。
  「表削除」−−「表登録」によって登録されたもののうち不要となったものを削除
         します。
  「表削除」−−「表登録」によって登録されたもののうち不要となったものを削除
         します。
  「列枠幅」−−表示枠の幅を変更するなら定義ファィルを変更しなくても、これで
         できます。
         変更内容は定義ファィル(xxxx.DEFファィル)に書き込ま
         れます。
  「表切替」−−定義ファィル(xxxx.DEFファィル)を2つ指定した場合は
         2つの表を操作できます。この表を切り替えるのに使用します。
         但し、移る前にデータ更新の旨の会話が存在します。

  「ヘルプ」−−あらかじめエディタで編集しておいた説明を画面に表示します。

  「 電卓 」−−画面上で電卓計算をサポートします。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第10章] プログラムの起動方法とプログラム名

[表定義プログラム]

     A>DIETINI (DEFファィル名)

  本説明書で述べた仕様を網羅したプログラムです。つまり、このプログラムで定義
  したファィルや機能を下に述べるプログラムが利用し、データ入力操作をするから
  です。
  個々の設定の説明はここでは省略しますが、重要な注意事項として1点だけ述べて
  おきます。

    第2面目でフィールドの定義をしますが、その並び順は物理的な配置順に並ん
    でいて、第3面目以降は第2面目で指定された「表示順」に従って並んでいる
    という理屈です。

  それ以外の指定の仕方については、本説明書に述べた機能を理解して頂ければ検討
  がつくと思います。

  また、このプログラムは印刷機能を「DIETPRN.EXE」に実行させていま
  す。同じディレクトリに置いて下さい。

[表操作のみのプログラム]

     A>HEXEC_V4 (第一DEFファィル名)(第二DEFファィル名)(スイッチ)・・・

[表操作に計算機能・抽出機能を付加したプログラム]

     A>DIET_V4 (DEFファイル名) (スイッチ)・・・

    [この場合、DEFファィル名(****.DEF)と同じファィル名に
     .CALや.SELという拡張子のついたファィルが必要です]

  以下に起動スイッチの種類と意味を説明します。
  定義ファィル名を指定しないで、プログラム名だけ入力した場合は、説明を表示
  します。

  (1)「/D<データファイル名>」
     あらかじめ定義してある操作対象のファイル名を変更できます。1つの
     DEFファィルでいくつものファィルを操作したい場合や、構造が同じで別
     名のファィルを一時的に操作したい時に使用します
環境変数[RAMDRV]がセットされている時、そこのファィルにしたい
ならば「/D^RAMDRVabc.dat」と指定すると、RAMDRV
が例えば E: なら E:abc.dat を指します。
  (2)「/R<最大レコード数>」
     その操作時の最大レコード数を指定し、それ以上はレコードの追加をするこ
     とができないようにします。これが無い場合は、最大約20億レコードまで
     作成可能です。
  (3)「/F<先頭バイト数>」 操作対象ファイルの先頭の何バイトを操作対象
     から除外するかを指定します。
             [ファイル全体]
       ┌─────┬────────────────┬────┐
       │ 対象外 │   操作対象エリア      │対象外 │
       │/F指定 │  (レコードの追加も可能)  │/E指定│
       └─────┴────────────────┴────┘
       ・・・ つまり、操作対象エリア以外が別の構造に ・・・
       ・・・ なっているファィル等を操作する場合など ・・・
  (4)「/FR<先頭レコード数>」 操作対象ファイルの先頭の何レコードを操
     作対象から除外するかを指定します。
  (5)「/E<最終バイト数>」 操作対象ファイルの最終の何バイトを操作対象
     から除外するかを指定します。
  (6)「/ER<最終レコード数>」 操作対象ファイルの最終の何レコードを操
     作対象から除外するかを指定します。
     上記(4)(6)は(3)(5)のレコード数指定型です。
  (7)「/T<タイトル>」
     あらかじめ定義してあるタイトル内容を変更できます。
     この時、全角文字で30文字以内として下さい。
     また、/T^** のように ^ マークを付けた場合は、最長16バイト
     までの制限で、現在定義されているタイトルに追加できます。
  (8)「/K」 漢字入力のFEP自動起動を中止します。
  (9)「/L」 データの入力はできません。確認用として使用します。
       ・・・ 標準の機能である「モード替」を使用した場合 ・・・
       ・・・ 入力モードとなったり、表示モードとなった ・・・
       ・・・ りするのは、/Lがあっても同様です    ・・・
 (10)「/&」 [このスイッチ以降は第二定義ファィルに対するものとなる]と
          いう為のスイッチです。
 (11)「/B」 バックアップファィル(****.BAK)の作成を抑制しま
     す。通常はデータ名は***.DATにする方が望ましいです。
 (12)「/S」 表を最初に表示するときから前述した「データ詰め表示」モード
     にできます。
       ・・・ 標準の機能である「罫線」キーを使用すると ・・・
       ・・・ どちらの表示方法にもできます       ・・・
 (13)「/M」 これを付けると、「データ入力はリターンキーを入力して初めて
     入力されたことになる」モードとなります。
    ・・ データ入力時、シフトキーを押しながらリターンキーを ・・
    ・・ 入力すると、リターンキーでしか入力できないモードと ・・
    ・・ 他のカーソルキーなどでも入力できるモードとが切り替 ・・
    ・・ わります。リターンキーでしか入力できないモードの時 ・・
    ・・ は入力エリアを囲む枠がブリンクすることで判ります。 ・・
 (14)「/A」 これを付けると、既に存在するデータについては「見ることがで
    きる」だけで、「変更することはできない」モードとなります。
       ・・・ 「モード替」キーを使用しても新規入力エリア ・・・
       ・・・ しか操作できません            ・・・
 (15)「/G(レフトマージン)」
    表の横幅が画面枠より小さい場合には、中央に表示するようになっていますが
    、この位置を変更指定できるものです。
         例えば「/G0」とすれば幅に係わらず左端から表示します。
 (16)「/U」
    データを入力後リターンキーを押した時、カーソルが下へ移動した方が便利な
    場合に使用します。
 (17)「/I(ファィル名)」
    表操作によりデータが更新されたかどうかを調べたいとき、使用します。
    データ更新時は「ファィル名」で指示した案内ファィルが作られ、そこには
    シーケンシャルに操作対象ファィル名と最大レコード数が書き込まれてありま
    す。
 (18)「/PJ」
    印刷で最終頁の空行をデータ印字しません。通常は1ページ分の枠を印字しま
    すが、データがそれ以上無い時は罫線枠も印刷しないというものです。
 (19)「/PL<レフトマージン>」
    印刷時左端を指定幅だけあけるのに使います。
 (20)「/PP<カウント>」
    印刷後、通常はページ替えを実行しますが、指定により指定行を送るだけとし
    ます。
 (21)「/J<パス名>」
    作業用ファィルのドライブ・ディレクトリ名を指定します。
    指定しない場合はカレントディレクトリとなります。
    また、もし環境変数[RAMDRV]が設定されているとそのドライブ・
    ディレクトリを先頭に付加することになります。(/J^RAMDRV)
 (22)「/O」
    一行表モードでスタートします。
 (23)「/C<色>」
    罫線の色を指定します。指定しないと黄色になります。また、「抽出」や
    「表隠し」をするとその都度色が変わります。
           色 = 1:青 2:赤 3:紫 4:緑 5:水色 6:黄色 7:白
(24)「/N<n>」
    指定NO.の表登録状態でスタートします。n=1は基本表です。
 (25)「/V」
    NECのPC−9801の機種の場合、裏G−RAMをデータエリアとして使
    用していますが、それをさせない指定です。
 (26)「/X<コメント>」
    コードセレクタやディスクリンクの表示の元になるコードがコードオーバーの
    場合、このコメント文字を表示します。
    指定しない場合は「(オーハ゛)」と表示されます。
 (27)「/W<n>」
    表操作上のテンポラリファィル名をこれでコントロールできます。
    WINDOWSやOS/2などで、2つのプログラム間でファィル名を区別
    させたい時に使います。nは1から99です。
 (28)「/Y<インデックスファィル名>」
    インデックスファィルによる表操作をする指定です。インデックスファィルは
    1レコードが4バイトのlong表現で、そこに入っている数値(0から)が
    対象ファィル上でのレコード番号です。
環境変数[RAMDRV]がセットされている時、そこのファィルにしたい
ならば「/Y^RAMDRVabc.inx」と指定すると、RAMDRV
が例えば E: なら E:abc.inx を指します。
 (29)「/Z<n>」
    データはメインメモリ上で操作される訳ですが、通常は16Kバイトを確保し
    て動作しています。
    ところが、例えばインデックスファィルによる操作の場合などは、ともすると
    バッファサイズが小さい方が処理スピードが速くなる場合があります。
    そんな時バッファサイズをnバイトとするというように使用します。
 (30)「/EN」
    EMSメモリは必ず64Kバイト以上を確保して頂いておきたいのですが、
    利用できない環境の場合はこのスイッチを使って下さい。
    そのかわり、メインメモリが不足する確率が高くなります。
 (31)「/FD<n>」
    ディスクリンクで常時オープンするファィル数をここで指定します。
    指定しないとデフォルトは0なので、データを取りにいく度にオープン・クロ
    ーズをかける為、表示スピードが遅くなります。
 (32)「/H<filename>」
    「ヘルプ」キーを押したとき、横40カラム長のメニューが表示され、
    どれかを選択するとその項目の説明が画面上に表示されます。
    デフォルトは[HELP_MES.HEL]というファィルですが、
    構成は、横40桁のタイトルに続けて8文字のファィル名を設定して
    おきます。8文字.HELというファィルにそれぞれの説明がはいって
    いるという仕掛けです。説明ファィルの枠は、横最大78カラム、
    縦最大23行です。
 (33)「/Q<nn>」
    一行表で表示の時、レコード番号を表示するが、/Qを付けると、
    表示しないようにする。また、nnを不可すると、その数値分
    がレコード番号に加算されて表示れる。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第11章]SS−DIETの計算機能

  計算式をDEFファィルと同名で拡張子「.CAL」のファィルに定義しておくだ
 けで、下記の種々の計算を自動実行することができます。
 これまでの説明では、[フィールド]という言葉を使用していましたが、ここで言う
 計算式では良く使われる「セル」という表現を意識して、「C__」と表現します。
 ここで、__はフィールド番号であり、1から数えます。
 これは、定義ファィル(DEFファィル)上で表現されているフィールドと全く同じ
 ものです。
 ここで説明する[式]は PICK_V4.EXEとPICK_IDX.EXEで使用
 するものと同じ仕様です。
 また、計算に利用できる列番号の指定の仕方には次のタイプがあります。
C0ならそのレコードno.自体をデータとします。
C15 C15のみ
C15T18 c15 から 18 まで 1 ずつ増やしながら加算
c15+c16+c17+c18 ということ
C15T31S4 c15 から 31 まで 4 ずつ増やしながら加算
c15+c19+c23+c27+c31 ということ

 [計算式の定義形式] −− 下記の指定文字列を1行として、計算すべき数だけ
               シーケンシャルファィルとして並びます。

     C**(pp) = aa { 計算式 } bb

**はフィールド番号で1からの連番です。
  ppはそのセルが文字型の場合に、小数点以下何桁で表すかを指定します。
  aaは最初のレコード番号を指定します。先頭からなら 1 です。
  bbは最後のレコード番号を指定します。直接値か MAX-***で表します。
  MAXとは現在の最大レコード数です。

  計算式は 次の文字の組み合わせです。
    ( , ) , + , − , * , / , &&(AND論理)
    ||(OR論理) , == , <= , >= , < , > ,
    {{(左から文字列比較) , }}(右から文字列比較) ,
    {}(文字列が含まれるかの論理) ,C**(セル) , 数値 ,
    ”文字列”

  また、計算式の形がつぎのような場合は判断文の意味を持ちます。
    AAAA:BBBB:CCCC
     AAAA 判断文
     BBBB 真なら計算する
     CCCC 偽なら計算する

 また、以下の関数が使用可能です。(カッコでくくり、アーギュメントは3つまで)
abs : 絶対値
acos : アークコサイン
ank : 漢字文字列をANK文字列に変換
ank("123") ---> 結果は 123
asc : 指定文字のコード(0 から 255)
asin : アークサイン
atan : アークタンジェント
atan2 : アークタンジェント2
beep : ビープ音        BEEP(0) : 鳴らさず 1 : 鳴らす
   リターン 値は1
ceil : 切り上げられた整数値
cos : コサイン
cosh : 双曲線コサイン
cut : 文字列両側の半角・全角のスペースをカットする
     CUT(" 123 ") は "123" となる
date : 万年暦よりその日(1〜31)を返す。異常なら0
date(c12) : c12 は日付タイプ
divid : わり算を実行する
divid(c12,c13,"1") c12 / c13 を実行
もし c13 が0なら計算結果を1(例えば)としている
  empty : 半角・全角のスペースをカットするとヌルとなるかどうか
empty(c15) : c15 がヌルなら真
  exp : 指数関数
ffget : 他のファィルのデータをとってくる
ffget("test.dat","16:1:8",c13) (例)
test.dat の1レコードは16バイトであり、レコード番号
c13(1から)の先頭より8バイトをデータとしてとる
但しANKタイプのみに使用できる
画面にデータを表示したくない時などに使用する
floor : 切り下げられた整数値
fmod : 浮動小数点の剰余
hizuc : 万年暦値が第2オペランドの範囲に入るかどうか
       hizuc(c5,1234:1255)
  kan : ANK文字列を漢字文字列に変換
left : 文字列の左一部
log : 自然対数
log10 : 常用対数
  mann : yymmddの万年暦を返す
mark : マーク付けをする   MARK(条件式,AAA,BBB)
       条件が真なら文字AAAを、偽ならBBBを
mid : 文字列の真ん中をとる MID(C5,2,3)
mod : longの剰余
  month : 万年暦よりその月(1〜12)を返す。異常なら0
pow : べき乗
rand : 乱数値を得る
right : 文字列の右一部
scat : 文字列の結合
sin : サイン
sinh : 双曲線サイン
sqrt : 平方根
srand : 乱数初期化して最初の値を得る
str : コードを1文字に
stlen : 文字の長さ
tan : タンジェント
tanh : 双曲線タンジェント
time : 現在の日付時刻を
  year : 万年暦よりその年(1987−2086)を返す。異常なら0
  yobi : 曜日文字列を返す

データの計算はフィールドのデータが変更された時のみ計算します。
通常はどこが変更されても計算しますが、どこのフィールドが変更された時だけ計算す
るようにというフラグを設定することもできます。

使用例:

  C4(2) = 1 { C1+C2+C3 } MAX
  C5(0) = 1 { ABS(C4) } MAX

上の段は C1からC3までを加算し、小数点2桁以下切り捨てでC4にセット
せよ、また、下段は、C4の絶対値を小数桁を切り捨ててC5にセットせよという
意味です。


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第12章]SS−DIETの「抽出」機能

 データを複合的に検索して該当するレコードのみを残す処理を「抽出」機能とよんで
 います。その指定方法は、「定義ファィル」と同名で拡張子が「SEL」のファィル
 を定義し、以下の内容のテーブルを作成して下さい。

[***.SELの指定]

 一言でいうと、タイトルと式を入力しておいて、式の値が真になるレコードを抽出ま
 たは並べ替えをするプログラムです。

(1)ファィルの最初の行に F 1 2 3 4 等の表現があれば、ファンクションキーの設
   定です。
"@↓↓" /* no. 1 */ "左端へ" /* 2 */
"右端へ" /* 3 */ "先頭行" /* 4 */
"最終行" /* 5 */ "ジャンプ" /* 6 */
" 検索 " /* 7 */ " 復帰 " /* 8 */
"一行表" /* 9 */ "A↓↓" /* 10 */
" 印刷 " /* 11 */ "表隠し" /* 12 */
"表復帰" /* 13 */ "表登録" /* 14 */
"表選択" /* 15 */ "表削除" /* 16 */
" 抽出 " /* 17 */ " 罫線 " /* 18 */
"B↓↓" /* 19 */ " 記憶 " /* 20 */
"貼付け" /* 21 */ "上複写" /* 22 */
"行複写" /* 23 */ "モード替" /* 24 */
"表切替" /* 25 */ "列枠幅" /* 26 */

以上の26個が設定可能であり、指定したいものを並べて下さい。

また、指定しなかった場合は、デフォルトして、上記番号でいうと下記の
順になります。

[ 1 , 2 , 3 , 4 , 5 , 6 , 17 , 8 , 9 , 10 , 11 , 12 , 13 , 7 , 18 ]

(2)続いての行に ^***** または ~***** とあれば 総タイトル(****)とみなします
   。ここで、^ や ~ はどちらを書いても良いです。
(3)総タイトル以降は
   タイトル 1
式 1
タイトル 2
式 2


と続けます。タイトルはそのまま選択メニューとして使われ、20タイトルま
で登録可能です。
    また、式は @[スタートNO.][エンドNO.][計算式]
          ASS[スタートNO.][エンドNO.][条件式]
    の2つのパターンで表現します。

    ここで、[スタートNO.][エンドNO.]は「抽出」処理をする開始レコ
    ードNO.と終了レコードNO.を示します。このとき、全レコードを対照と
    することができるように、数値表現(1から)の他に
    MAX,MAX+n,MAX−n(nは数値)の表現も可能です。
    上の@は計算式(例えば C4==5)の評価が真(TRUE)となる
    レコードのみを別のファィルに保存し、その内容を表示することができ
    ます。また、AのSSとはソートの意味であり、条件式とはnS、nL
    の羅列です。ここで、nはフィールド番号、[S]は「小さい順」、 
    [L]は「大きい順」の意味です。

 (3)「抽出」によって一時的に作成されるファィル名は次の名称になってい
    ます。    「$$$$$HYO.nnn」
    ここで、nnnはメニューにならい、例えばメニュー5を選択した場合
    に作成されるファィル名は「$$$$$HYO.5」となります。
また、「抽出」を繰り返した場合に最後に「抽出」したファィルを利用
する時のために「$$$$$HYO.999」を残してあります。
 (4)「抽出」ファィルの存在するドライブ・ディレクトリはスイッチ「/J」
    で指定の場所となります。(無ければカレント位置)
 (5)タイプ@の[計算式]の中で、その時の会話により条件式を作りたいと
    きは次のようなフォーム規約を利用します。
     (ア)会話する部分を % 記号で囲んで、%_______% のようにセットし
        ておきます。ここで、_______ は質問内容であり、会話の結果
        入力された文字列が %______% と完全に入れ替わるものと考え
        て下さい。この時、下の(エ)の場合を除いて、会話の先頭から
        1または2文字が、もし半角の数値ならそれを会話入力のデータ
        サイズとみなします。
     (イ)%D______% とすると、入力されるのは yymmddかまたは
        yy/mm/ddの形式での日付入力を万年暦に変換する約束
        とします。フィールドタイプが日付型のものは1997年1月
        1日を1とした万年暦を符号無し2バイト整数として納めてあ
        るからです。当然先頭のDは案内の表示には無関係です。
(ウ)%K______% は、入力時FEPを自動ONする指示となります。
        先頭のKは案内の表示には無関係です。
     (エ)%R______% とあれば、その後の文字は表示しないで日付範囲を
        いつからいつまで、と聞いて、aaa:bbbの形にします。
        この場合は関数 hizuc(c1,”R”)が使用できます。
     (オ)また、直接の文字列は "___" を使います。文字列中の " は
        "" として下さい。
     (カ)文字列や会話の部分を、先頭から数えていき、エントリーNO.
        1から登録されることを理解しておいて下さい。そして、前回
        の値を使用したい時は %aa% などの様に aaにエントリー
        NO.を置いて下さい。ヌルなら1とみなします。
      また、登録なしなら、 "0" がはいったものとします。
        この約束は、%でも^でも同じす。
     (キ)会話入力時、ただリターンキーのみ押された場合は、0のキー
        1文字とリターンキーが押されたように処理しています。
     (A) % ではなく、 ^ 文字にも意味を持たせてあります。
        ^_______^a^の表現の時は、コードセルを使用するというもので
        す。ここで、 a はコードセルエントリーNO.を意味し、「定義
        ファィル」上で何番に登録したかを知っておく必要があります。
(B) a が、Ma または Ca なら次の意味をもたせてあります。
        Ma:コードセレクタno.aのウィンドゥで文字列を選択後、
           そのコードではなく、文字列を持ってきます。
        Ca:同上ですが、文字列の両方からの半角・全角のスペース
           をカットします。
また、Ver.4からは、 aPb,MaPb,CaPbのように
後ろに Pb(bは親コードのコードセルエントリーNO.)を
付けるとその親のコードに該当する子のコードセル会話をします。
     (C)^X**______^a^ のように、コメントの先頭にX**のパターン
        があれば、コードセルウィンドゥの左角位置をいうことになり
        ます。
     (D)更に、ファィルをここで指定して、コードセルとしたい場合は
        次のように設定します。  ^____^DM********^
   Mは上と同じ意味、****は下のものを,で区切ります。
        ファィル名,レコードサイズ,相対位置(1カラ ),サイズ,漢字on/off(0/1)
   ,レコードu\示文字数(0ならb表示しない)
        但し、もしファィル名として DISK とあった場合は、
        hyoiniで設定した「ディスクリンク(専用)」のファィ
        ル名とレコードサイズを利用するものとします。
        この時、レコードサイズ欄はディスクリンクのエントリー番号
        です。(0より)
(E)また、%______% や ^_______^a^ に続いて、%% や ^^a^ があれ
   ば、先にセットされたものと同じとし、入力会話もしません。
(6)入力会話時、案内コメントを更に追加することが3行までならできます。
    方法は全てのメニュー作成後、後ろへ続けて先頭に : をおき、すぐ
    続けてメニュー番号(1−−)をおき、スペースで空けたあとそこから
    コメントしたい内容をいれます。3行まで設定可能です。
 (7)親子の抽出の仕方

     C1==^部署は?^a^ && C2==^課は?^bPc^
a:コードセルNO. b:コードセルNO.     c:会話エントリーNO.
 会話エントリーNO.とは、会話と定数のエントリーを1からかぞえたもの

 [抽出設定例]

  例:  F 10 1 2 3 6 7 8 9
      ^抽出メニューです    (または  ~抽出メニューです)
売り上げの多い人を調べる
1 max c2 >= %いくら以上の人を探しますか?%
地区コード別に並べる
SS 1 max 3S
コード別に選ぶ
1 max c3 == ^学校コードをえらんで下さい^2^
(コードセルエントリー2ということ)





SS−DIET Ver5.0 の 機能追加点
============================================

・罫線の幅を0(なしということ)から複数まで指定することが可能。
 (ブロック化という)

・「削除」・「挿入」はブロック単位で実施。

・「抽出」した時、ファィル TOTLGYO$.$$$ が存在すれば、
 それを行末に付加して表示する。「合計」表示機能がある。

 大きな制限があり、立ち上げは /L でスタートすること。

 「復帰」時、そのファィルは削除される。
 これを利用する為、xxx.SEL の表記の仕方では下記の様なことを追加した。

    [ メニュー タイトル ]
    1 MAX C3 == 2 [G8 12 13 14]

式の後ろに [ ] で囲んだ数値は、「抽出」しながら
そのフィールド(1から)について縦合計をするということ。
G付きの数値は、そのフィールドへ 合計という文字を入れる
という指定。

 抽出の抽出も使用可能である。
 ただし、ソートの行に合計を指示しても無効である。

・外部で TOTLGYO$.$$$ファィルを作成した場合は、/Yスイッチで
 インデックスを利用した場合、これの表示が可能。
 この場合は、ファィルの削除はしない。

・ディスクリンクのディスクリンクが可能である。

                            以上


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

[第13章]その他のデータベース操作ツール

 上に述べました「定義ファィル作成プログラム」「表データ入力・検索プログラム」
 の他にも下記のようなツールを用意しました。

尚、PICK、PICK_IDX、FASTPICK、SORT、HYOUTLなどは
WINDOWS版では、SSDB命令のCHILD命令で起動できます)

  (1)複合検索プログラム     PICK_V4.EXE
    検索条件を会話的に入力し、指定の構造のファイルに出力することが可能です
    検索式は既に述べた[計算式]の説明どおりです。
    HEXEC_V4 や DIET_V4 のスイッチも有効です。

    起動方法: A>PICK_V4 定義ファィル名 計算式 出力ファィル名
            (END) リターン

    計算式は、その文字列をファィル名とみなしてチェックしてみて、存在
    すれば式を入れたファィルとみなします。また、最後に「END」があ
    れば表の会話をせずにプログラムを終了します。
    但し、最初に対象のファィルを出力ファィルにコピーしてからチェックし、
    もし、会話で「書き込み」をしなければそのファィルはそのまま残ります。

  (2)ソートプログラム      SS.EXE SSR.EXE
    複数のキー、しかもバイナリデータのキーを指定することにより昇順/
    降順にソートすることができます。

    起動方法: A>SS 定義ファィル名 入力ファィル 出力ファィル スタートREC
            エンドREC 1L 3S ・・・・ リターン

   出力ファィルは存在チェックなしに構わず書き込みます。入出力ファィルの
   レコードサイズは同じであるものとします。
    例えば 1L 3S とはフィールドNO.1(1〜 )を大きい順に
    且つ フィールド3を小さい順に 且つ レコード順(デフォルト)
    にソートするものです。
   スタートRECからエンドRECをみて、全ファィルでなければ、最初
    にOUTファィルにコピーしてから並べ替えをしています。

    SSR.EXEの使い方

          A>SSR 指示ファィル

    SS.EXEの連続実行版であり、SSを複数回実行したい時その都度
    起動し直さなくて良いようにしたものです。

   指示ファィルの内容 (シーケンシャル)
・定義ファィル名 CR
・入力ファィル名 CR
・出力ファィル名 CR
・スタートREC CR
・エンドREC CR
・条件個数 n CR
・1L CR
・3S CR
・ ・ CR
・ ・ CR n個続く
・ ・ CR
・ ・ CR
これを続けます。他は SS.EXEと同様です。

 (3)ファイル構造出力プログラム    STRUCT.EXE
                     DEFOUT.EXE

    SS−DIETにおけるファィル構造はオープンです。
    「定義ファィル」を解釈して構造を述べ、ドキュメントとしてファィル
    に出力するものです。

    起動方法: A>STRUCT 定義ファィル名

    読み込む定義ファィル名を拡張子無しで指定すると、***.docを
    出力します。

    また、DEFOUT.EXEは主にデータベース操作言語用に利用する
    もので、プログラム起動後***.DEFを選択します。
    結果は $. というファィルに書き込みます。

 (4)簡易表計算プログラム       WAKU.EXE

    これまでにのべましたSS−DIETの機能は非常に多すぎて、準備が
    大変です。そこで、「全く単純なファィルについてデータを入力して、
    しかもそれを印刷できるだけでよい」というユーザの為に、表の枠を自
    由に設定できる簡易設定プログラムと実行プログラム(計算機能付き)
    を用意しました。

    起動方法: A>WAKU WAKU.DEF 定義ファィル名

    コードセルやディスクリンクの無い単純な表についてその表示サイズを
    変更することができるツールです。

 (5)データベース検索及びアプリケーション構築用プログラム言語

    データベースから種々の条件でデータの検索をしたり、諸計算を実行さ
    せたりして、御社独自のアプリケーションプログラムを作成したいユー
    ザの為に、BASICライクな「問題向き言語」を用意しています。
    インタプリタ方式で実行され、簡単なプログラムを迅速に作成してしま
    いたい場合に役立ちます。もちろんSS−DIETのファィルも、例え
    ば1セルを1変数の様に扱え、処理ルーチン作成の生産性としては非常
    に高いものになっています。
    この言語システム 「S_SSDB」は別途資料を参照して下さい。

  (6)帳票作成ツール HYOUTL.EXE

    帳票イメージを、市販のエディタプログラムで作成し、同時にデータを
    どこにどういう形で印刷するかを指定できるようになっています。
    これにより、単純な表のみならず、あらゆる形式の帳票も作成すること
    が可能です。

===================================
  === ここにその詳細仕様を記述します ===
===================================

罫線入り帳票印刷ツール

起動時に罫線フォームファイル(拡張子 **.FRM)から帳票イメージを取り込み,
テキストデータ(拡張子 1.TMP)を,罫線入りの帳票に,差込み印刷する。
半角文字も2バイトコードを用いるため,漢字とANKの印字幅は2対1となる。
ま罫線は漢字コードで印字するため,文字間隔は詰めて(ドットスペース=0) 片方向に印字
する。

【 帳票印刷の手順 】

(1)罫線フォームファイル(****.FRM)をエディタで作成する。

・モード設定
(書式) (デフォルト)
改行重ね幅 &Tnn &T00 ォ nnドット重ねる。(デフォルト 18/120インチ改行)
( 18 >= nn >= -9 )
左マージン &Lnn &L00 ォ 半角nn文字分のレフトマージン幅を,設定する
(行頭に';'を置いた注釈行に,上記制御文字だけを書込めば,制御のみ行ない
スペース印字や改行はされない。)

・フォーム内に書き込む文字の制御
アンダーライン &_ … アンダーラインon/off
倍角文字 <<字 … 日本語(漢字)の倍角

・テンポラリデータを差し込む,制御変数の書式
右詰め印字用変数
##,###,### ォ 数字列 3桁ずつ','で区切り印字する
###,###.## ォ 〃 〃 〃 ,小数点以下2桁印字
・ データがANKの数字でなければ、','や'.'は、 '#'と見なす。
######## ォ 文字列を印字(全角の場合1文字で2個の'#'が必要)
#222222# ォ 文字列を拡大(横2倍)印字
#______# ォ 〃 アンダーライン印字
#!!!!!!# ォ 〃 強調文字印字

左詰め印字用変数
$$$$$$$$ ォ 文字列を印字(全角の場合1文字で2個の'$'が必要)
$222222$ ォ 文字列を拡大(横2倍)印字
$______$ ォ 〃 アンダーライン印字
$!!!!!!$ ォ 〃 強調文字印字
(印字領域は #,$ 等を含めた範囲。また,'#'や'$'は文字,数字を問わない)

・制御文字列以外は,そのまま印字される。(1行あたりの最大桁数は512桁)

・行の先頭に';'があれば,注釈行として無視される。
 また,各行のうしろに,';'に続く注釈を書込むことができる。

(2)帳票データのテンポラリファイル(テキストファイル 1.TMP)を作成する。

・最初に対応するフォームファイル名を,必ず書き込む。
・BASICや、C言語、SSDB などでシーケンシャルにデータを書込む。
 データの区切りは改行コード
・データの先頭に';'があれば,注釈行として無視される。
 また,各データのうしろに,';'に続く注釈を書込むことができる。
・改行のみでも,1つのデータ(スペース データ)として扱われる。
・データのならび方は,PC−PRプリンタの印字する順序に従う。
(1データの最大桁数は256桁)
・2ページ目以後は、各ページの最初の行に "P.T.O" cr を書き込む

(3)帳票印字プログラム("HYOUTL.EXE")を起動する。

・オプションのパラメータ
-Tはテンポラリファィル(1.TMP)の前に付けるパス
もし -T^RAMDRV とあれば環境変数 RAMDRV を利用する
-F<ディレクトリ> ォ <ディレクトリ>はフォームファイルのディレクトリ名を、指定
-M (-m,/M,/m) ォ 1ページごとに、印字するかを確認する。(応答メッセージ)
-M- ォ 応答メッセージ抑制(印刷すれば直ちに終了する)
(デフォルトでは"もう一度印刷しますか?"の確認あり)

(4)例題
フォームファイル例
"P0099901.FRM"
テスト表 ########
┌───┬───┬────┐
│会議名│役員数│傍聴者数│
├───┼───┼────┤
│$$$$$$│######│ ###,###│
├───┼───┼────┤
│$$$$$$│######│ ###,###│
└───┴───┴────┘

テンポラリファィル例
"1.TMP"
P0099901.FRM
90/03/23
A打合せ
25
12345
B会
36
45678

上の2つから合成された印刷イメージ

テスト表 90/03/23
┌───┬───┬────┐
│会議名│役員数│傍聴者数│
├───┼───┼────┤
│A打合│ 25│ 12,345│
├───┼───┼────┤
│B会 │ 36│ 45,678│
└───┴───┴────┘

===================================
===== 以上が HYOUTL.EXE の詳細仕様です ======
===================================

  (7)他のデータベースへ渡すデータを作成する。 HSAVE_V4.EXE

     SS−DIETで表として作成してデータを全て文字列にし、しかも
     カンマ記号で区切りながら1行ずつファイルに出力するものです。

     起動方法: A>HSAVE 定義ファィル名 出力ファィル名

  (8)データ初期化プログラム    CLEAR_V4.EXE

     アプリケーションを作って使用しているある時期に、ファィルの指定
     したフィールドのみを0クリアしたい場合がよくあります。
     それをコマンドを入力するだけで実行してしまうものです。
     「定義ファィル」と同名で拡張子が「.CLR」のファィルを下記の
     ように作成します。

         例:1:5
      8
      10:15
  この例ではフィールド 1から5と、8と、10から15を
  全レコードについて0クリアします。

     起動方法: A>CLEAR_V4 定義ファィル名

  (9)複合検索プログラム     PICK_IDX.EXE

     起動方法  A>PICK_IDX 定義ファィル名 計算式 出力インデックスファィル名

     (1)のPICK_V4.EXEと同様なのですが、計算式はそれをチェッ
     クしてファィルとして存在すれば式を入れたファィルとみなし、吐き出しフ
     ァィルを、インデックスファィルとしたものです。
     また、出力後はプログラムを終了します。

 (10)縦合計プログラム      GOKEI.EXE

     起動方法  A>GOKEI AAA BBB CCC DDD

     指定フィールドについて縦方向に合計計算をさせたい時に使います。
     元のファィルのデータをそのまま並べ、最後の行に合計をセットします。

    AAA:定義ファィル名   BBB:出力ファィル名
    CCC:フィールドテーブルファィル
   「合計」という文字をいれるフィールド番号(1から)
   ヌルデータなら「合計」という文字はセットしない
        合計をするフィールド番号(1から)
       ・
       ・           (並ぶ)
      ・
    DDD:インデックスファィル
        無くても良いがあれば入力データをインデックス付きとみる。

 (11)高速複合検索・合計処理プログラム    FASTPICK.EXE

    起動方法  A>FASTPICK 定義ファィル 条件ファィル

  指定条件をテーブルで指定することにより、PICK_V4.EXE や PICK_IDX.EXE
  より高速で集計することができるものであり、 GOKEI.EXE の機能も兼ねます。

[条件ファィルの構造](シーケンシャルファィル)
1 OR FILE_NAME 1:データそのものである FILE_NAME:読み込みインデックスファィル名
1 OR 2 1:データそのものである 2:インデックスを吐き出し
出力ファィル名(データまたはインデックスファィル)
G** ** は1からのフィールド番号 その列を合計する
・・ データタイプなら1行増える  インデックスタイプなら
・・ TOTLGYO$.$$$ ファィルに吐き出す
(このファィルは、Ver.5でないと利用不可)
K** 1つだけ(最後の宣言)を許し、 ** のフィールドに「合計」
       という文字を書き出す
Y** f1 f2 ・・ f1 f2 ・・を横方向に合計して ** にセーブ(1からのフィールド番号)
f* は f5:12:2 (5から12まで2とばし[例])も可
C** && val ** は1からのフィールド番号
・・ && は > , < , >= , <= , == , != , {{ , }} , {}
・・ val は数値ならそのまま " " なら文字列
フィールドタイプが文字なら必ず " " とする
・・ ★★ 各行の AND 条件のみである ★★

 (12)16進コード表示プログラム   HEX_DMP.EXE

    起動方法  A>HEX_DMP 定義ファィル

       HEXEC_V4 と同様に定義ファィルを指定して、
       ファィル操作をするだけですが、「終了」以外のどのファンクション
       キーを押してもただそのデータを16進数で表示するだけとなります。
       例えば、漢字コードなどで[表示されないがどういうコードがはいって
       いるのだろう]とかでコードを調べたい時に、「終了」以外のどのキー
       を押しても内容の16進表示のみをするようになっています。

 (13)隠しパターン編集プログラム        ENVED.EXE

    起動方法  A>ENVED 定義ファィル

     「表隠し」状態を登録する機能としては「表登録」「表選択」「表削除」
     などがあるが、この隠しパターンが大量あるいはフィールド数が多いと
     操作に時間がかかります。
     そんな時表形式で隠しパターンを作成・追加・削除することができます。

 (14)バッチキー取得プログラム          P.EXE

    メニューをバッチコマンドで作成した場合に使えるキー入力プログラムです。

    押されたキーによって以下の数値を返します。

  [キー]         [返り値]
STOP,COPY 0
f・1 - f・10 1 - 10
roll・up 11
roll・down 12
ins 13
del 14
↑ 15
← 16
→ 17
↓ 18
home 19
help 20
esc 21
bs 22
tab 23
xfer 24
nfer 25

他のキーはそのキーのコードが返ります。

これを IF ERRORLEVEL *** で区分けして、使用して下さい。

 (15)ハードコピープログラム        GCOPY*.EXE

   画面上のキャラクタ・グラフィックともに合成してハードコピーをとります。

GCOPY1 −− 白黒でハードコピー
          CAPSがONでプリンタがその機能付きなら拡大印刷す
GCOPY3 −− GCOPY1と同じ 拡大機能無し
GCOPY2 −− アーギュメントを指定すると、白黒だけではなく
          カラーの諧調付けプリントが可能
            カラーパレット0−15に対して、ドットパターン0−15
            をA−P(0x41−0x50)で指定
            最後に、0ならモノクロ 1ならカラー
            モノクロならカラー設定は意味無し
            倍サイズのみサポート
            よって、アーギュメントの文字サイズは17文字固定
            例:A>GCOPY2 AAAAAAAAAAAAAAAA0
              A>GCOPY2 ABCDEFGHIJKLMNOP1

 (16)コードセレクタプログラム       CODSEL.EXE

   起動方法 A>CODSEL file_name Seq SORT SAVE RECSIZE RECMAX TITLE
RELATIVE FSIZE KAN_FLAG リターン

file_name : 対象ファィル
Seq 1 : シーケンシャル(CR-LFあり) 0 : ランダム(CR-LFなし)
SORT 1 : 事前にソートしておく 0 : しておかない
SAVE 1 : 終了時セーブする 0 : セーブしない(編集不能)
RECSIZE レコードサイズ
RECMAX レコード数の上限
TITLE タイトル文字列
RELATIVE ファイルの1フィールド(セレクタ)相対位置 1から数える
FSIZE フィールドサイズ
KAN_FLAG 1 : FEPをONにする 0 : しない

結果は $$CLIP$$.$$$ ファィルに 選択されたコードセル番号 CR
選択された文字列 CR の順にセーブされます。

 (17)ラベル印刷プログラム      LABELPRT.EXE

  先に LABEL$$$. ファィルに下のデータをならべておきます。

[2バイトコード以外あってはならない]

・LINE 1 例:郵便番号
・LINE 2  例:ヌル
・LINE 3  例:住所1
・LINE 4  例:ヌル
・LINE 5  例:住所2
・LINE 6 例:ヌル
・LINE 7 例:相手会社名/住所3 等
・LINE 8 例:ヌル
・LINE 9 例:相手氏名
・LINE10 例:ヌル

10ライン固定で何人分あってもいいです。

  起動方法 A>LABELPRT **** リターン

アーギュメントは   横方向人数(max9) 縦方向項目数(max10)
つづいて  横方向TAB位置 縦方向空り回数
左端の空白
また、付けるなら続けて LABEL$$$. ファィル の存在する ドライブ・ディレクトリ

例えば縦方向に5行印刷する場合は、上のLINE 6−10にはヌルを
置き、そのときは5行しか印刷しないので、縦方向空回り回数で調整します。


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  「SSDB」   「SS−DIET」  製造元:(株)システムサイト

                      (指導:酒谷技術士事務所)