- 【QBASIC互換!?】FreeBasic【GPL】
688 :デフォルトの名無しさん[]:2016/09/20(火) 20:49:37.29 ID:eyotWnv3 - >>685
>単純にテキスト・ファイルとして読む方が簡単のような気がするのですが。 マイクロソフトの内部処理で、 INIファイルにアクセスがあると、システム(スーパーバイザー、kernel32.dll)が読みだして、ランダムファイルかバイナリファイルに書き直します。 書き直した状態で、しばらく使用し、不明の時間が経過した後に、テキストファイルとして出力します。 したがって、 INIファイルが不在の時に初期値を書き込んで初期化し、 直後に内容を読み取る とした場合には、後者は、バイナリファイル等になった状態になっていて、内容を読み取れません。 ですから、操作対象となるINIファイルに対する参照がない状態、 たとえば、該当ソフトを停止した状態で、ノートパットで中身を読み取り編集する、 等は可能ですが、 中身を操作することが前提のソフトの中で、テキストとして読み取る・テキストとして内容を書き替える、 等をすると、中身が復旧困難になる程度の破壊が発生します。 重複起動等の時の資源の管理が目的ですので、テキストファイルとしての操作はできません。 >>682 >つか、-lang fbでコンパイルしているよね? していません。 fbc -s gui (FbEdit初期値)です。 -lang スイッチを指定してみたら、何が何だかわからなくなって、 -exや-eexの指定もしない(指定してもOn ERROR GOTO 処理のコンパイルができない)で、初期値のままにしています。
|
- 【QBASIC互換!?】FreeBasic【GPL】
689 :デフォルトの名無しさん[]:2016/09/20(火) 20:58:51.84 ID:eyotWnv3 - ShellExecuteEx(udtShellExecuteInfo)
を使った、 チルドレン(芋蔓状に、複数のタスクを実行する手法、MS-DOS 2 の頃の手法) を実行するルーチンがあったんだが、タスク終了までの待ち状態と子プロセスのリターンコード取得ルーチンを作っておいた。 Exec というそのものずばりの命令を発見した。 SHELLEXECUTEINFO構造体の内容が、さっぱりわからないし、V.B. で作った内容は、変数が未定義でエラーになってしまうし、散々だった。
|
- 【QBASIC互換!?】FreeBasic【GPL】
692 :デフォルトの名無しさん[]:2016/09/20(火) 21:40:15.70 ID:eyotWnv3 - >>668
>些細なことのようだけど、こういった部分をしっかりやると >処理速度も向上し、無駄な行数を減らせ、読み易いコードになる これやると、ソースの互換性が失われやすい。 一見無駄に見えるルーチンもあるけど、 Basic は、 ちょっとした処理をその場でチョコチョコとつくりあげて、おっつけ仕事に使う 言語なので、処理速度の向上(本来がTSS用言語なのでもともと遅い)は考えない。 ライブラリーの場合には、エラーチェックを十分しておくと、どこで障害が起こったのかがはっきりわかる。 あいまいな状態で動くようにしてしまうと、原因の特定がほぼできない障害に陥りやすい。 これ怖いから。連立方程式やOR(オペレーションリサーチ)の解が正しいかどうかわからない、といういやらしい現象が待っている。 繰り返し法で鞍部問題に引っかかったらば泣くしかないから。 JIS-Basic の範囲ならば、大体の機械で動作する。互換が確保される。 Free-Basic 用の命令に書き換えてしまうと、他のBasicに移植が困難になりやすい。 Function になっているが、ほとんどのBasic はGosub 行番かGosub ラベルなので 移植を考えると、関数名の引数には戻り値を設定しにくい。 今、移植でけつまずいている部分のほとんどが、V.B.専用ルーチン部分。 >>686-687 もマイクロソフトのルーチンを使わないでJIS-Basicの範囲で自分で他の入出力も作ってしまえば問題にはならない。
|
- 【QBASIC互換!?】FreeBasic【GPL】
694 :デフォルトの名無しさん[]:2016/09/20(火) 22:51:41.56 ID:eyotWnv3 - >>692 続き。
Win系はマルチタスクなので、以下のような注意が必要。(岩波講座、情報科学のどこかに記載) 変数 AとBを入れ替える時に、作業変数 Cを用意して C = A A = B B = C とやるのが一般的だけど、これだとマルチタスクではうまく動かない。 変数 A, B, C を占有して、他のタスクがこれらの変数を操作しないように制限をかけて、実行すること という条件が入る。 16Bit時代の Win だからまともにやっているかどうか知らないけれども、 kernel32.dll という一つのソフトに操作権を独占させることで、複数のタスクからの操作を排除している。 個別のソフトが >>686-687 のようなことをしてしまうと、原則としてまともに動かないことになる。 >>693 >仕様書だけ持ってきて、新しく書き直すなあ 仕様書はない。 システム(スーパバイザー)を操作する一群の命令群とこれに使用するサブルーチン 複数のソフトで共通使用するサブルーチン をまとめただけだから。 Print using の仕様が QBとVBで大きく変わったから、付き合いきれないと、Fotranの文字化ルーチンを作ったとか もしている。 このサイトのどこかにライブラリーが保管されているけど、類似のライブラリーとして 不定倍精度 二進化十進数 (BCD)演算。 のルーチンもある。これは、最初に使った機械が ±16桁、指数部±99のBCDだった。 統計をいじるようになって、有効桁が足らなくなって作った演算で、ふつう使うことがない。 金銭を使うソフトだと、加減算だけだとしても千兆位までの桁を確保しないと桁落ちが発生したりもする。 乗算が含まれると倍かくほしないと、おかしなことになりやすい(利益の3%に1/2を乗じた額であって、1.5%ではない、というのが社会関係の人。計算の入れ替えができない)。 だから、仕様書はない。ちょっとした計算をするためのライブラリーだから。
|
- 【QBASIC互換!?】FreeBasic【GPL】
695 :デフォルトの名無しさん[]:2016/09/20(火) 22:55:44.27 ID:eyotWnv3 - >>693
>誤解を恐れずに書くならC++ならぬ、C+みたいな位置付け まことにすまない。C, C+, C++ いずれも持っているが、 内容を機械語に直して意味を解釈する、 という悪癖を持っているので、自分でソースを描けない。 当然、違いもわからない。
|