1 名前:デフォルトの名無しさん [2006/02/08(水) 15:23:06 .net] FreeBasic ttp://www.freebasic.net/ 建てたいって人がいたので勝手に建てた 後はご自由にどうぞ 俺は知らん
696 名前:デフォルトの名無しさん [2016/09/17(土) 10:55:52.36 ID:ejCT2vp9.net] SHGetFolderPath が使えない。なぜか宣言されていない変数とのコンパイルメッセージが出る。 Dim mehwnd As HWND, CSIDLValue As Long Dim strGetFolderPath As String 'Dim strGetFolderPath As String * MAX_PATH 'Dim strGetFolderPath As ZString * MAX_PATH Dim hToken as HANDLE = 0, dwFlags as DWORD =0 Dim IErrorLong As Long mehwnd = 0 'Declare function SHGetFolderPathA(byval hwnd as HWND, byval csidl as long, byval hToken as HANDLE, byval dwFlags as DWORD, byval pszPath as LPSTR) as HRESULT 'ユニコード ' declare function SHGetFolderPath alias "SHGetFolderPathW"(byval hwnd as HWND, byval csidl as long, byval hToken as HANDLE, byval dwFlags as DWORD, byval pszPath as LPWSTR) as HRESULT 'その他 ' declare function SHGetFolderPath alias "SHGetFolderPathA"(byval hwnd as HWND, byval csidl as long, byval hToken as HANDLE, byval dwFlags as DWORD, byval pszPath as LPSTR) as HRESULT '「HRESULT」は「Long」の別名 'IErrorLong = SHGetFolderPathA(mehwnd, CSIDLValue, hToken, dwFlags, strGetFolderPath) 'IErrorLong = SHGetFolderPathW(mehwnd, CSIDLValue, hToken, dwFlags, strGetFolderPath) 'IErrorLong = SHGetFolderPath(mehwnd, CSIDLValue, hToken, dwFlags, strGetFolderPath) MessageBox(TakaHWND,"Hello "+strGetFolderPath+"-1","Messagebox caption",MB_ICONINFORMATION)
697 名前:デフォルトの名無しさん [2016/09/17(土) 11:05:48.78 ID:ejCT2vp9.net] >>660 vbcompat.bi - datetime.bi, dir.bi, file.bi, string.bi 、およびマイクロソフト Visual Basic互換の追加定数を含んでいます。 とあるので、スーパーバイザー関係である >>662 の先頭を #include once "windows.bi" #Include Once "win/commctrl.bi" #Include Once "win/commdlg.bi" #Include Once "win/shellapi.bi" #Include Once "vbcompat.bi" と変更して、コンパイル。 DimChk5.bas(103) error 41: Variable not declared, SHGetFolderPathA in 'IErrorLong = SHGetFolderPathA(mehwnd, CSIDLValue, hToken, dwFlags, strGetFolderPath)' DimChk5.bas(104) error 41: Variable not declared, SHGetFolderPathW in 'IErrorLong = SHGetFolderPathW(mehwnd, CSIDLValue, hToken, dwFlags, strGetFolderPath)' DimChk5.bas(105) error 41: Variable not declared, SHGetFolderPath in 'IErrorLong = SHGetFolderPath(mehwnd, CSIDLValue, hToken, dwFlags, strGetFolderPath)' と解釈されない模様です。 #Include "vbcompat.bi" #Include once "windows.bi" #Include Once "win/commctrl.bi" #Include Once "win/commdlg.bi" #Include Once "win/shellapi.bi" でも同様な結果です。
698 名前:デフォルトの名無しさん [2016/09/17(土) 11:08:54.61 ID:ejCT2vp9.net] >>660 なぜか既に入っていた。 #include "file.bi" #Include "vbcompat.bi" #include "string.bi" #include "dir.bi" と。 先頭に変更しました。
699 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 11:31:22.68 ID:ejX8tU80.net] >>661 それはstring型でも同じだと思うけど?
700 名前:デフォルトの名無しさん [2016/09/17(土) 12:17:02.22 ID:ejCT2vp9.net] >>665 SepChrLong=&h00: 'SepChrLong=&h09 'Print #FileNoLong ,"InAStringPtr =";*InAStringPtr: 'この行でハング 'LSet InEString = *InAStringPtr: 'この行でハング とコメント行に変更して、コンパイルを通して得た結果が 宣言開始 len(InAString) = 128 128 文字の定義 len(InAString) = 128 FileName =D:\bas\Projects\DimChk4\TestDt01.txt InAString =1 (掲示板にコピーできない) www.dotup.org/uploda/www.dotup.org1005245.png.html にコピー前のテキストの画像を掲載 と長さが保存されている。 しかし関数参照後は、1まで、ヌルで切断されてしまう。 言語の方で理解できないようならば、Hex文字化して参照するという、古式手法を使うこととなる。 古いBasicだと、ランダムファイルでバイナリを読んでいたが、 長さがあわない実行形式のファイルだと、末尾に&h00を書き加えて長さをそろえる(Copy Command.com+tekito.nul CbCmd.com) か Int 21 で読み取って、Hex化して表示する 位しか方法がなかった。 Basic でDUMP.com を人力アセンブル(ハンドアセンブル)して、 Debug.com で逆汗(逆アセンブル)して、アドレスチェックして 作ったのが、DUMP.comで、使用頻度が多いので G.comに名前を変更して、(出力がコンソールなので、パイプ処理でテキストファイルを作成する)バッチファイルで使っていた。 機械語にしてもヌル文字(下位制御コード, &h00-&h1F)を含む場合には、Hex ダンプしてテキストとして使うという最終兵器がある。 V.B.ではLSET でByte配列にコピーしたんだけど、FreeBasic でのコピー方法がわからないでいる。
701 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 12:55:27.36 ID:ejX8tU80.net] >>6
702 名前:66 FreeBASICに限らず、どの言語でも ヌル文字(\0)は文字列型の終端文字(ターミネータ)として使っているから 文字列の途中にヌル文字を入れるってのは不可能でしょ ヌル文字は制御コードの1つだけど、他の制御コードをヌル文字とは言わんでしょ 例えば、テキストファイルから複数行の文字列データをstring型に格納したら 改行コードとかはちゃんと含まれるよ そもそも何の文字列を取り扱いたいの? テキストファイルにしても普通ヌル文字なんて混入していないでしょ >V.B.ではLSET でByte配列にコピーしたんだけど、FreeBasic でのコピー方法がわからないでいる。 普通にindexingすれば、文字コードを取得できるよ dim as string a = "abcdef" for i as integer = 0 to 6 print a[i] next i [] [ここ壊れてます]
703 名前:デフォルトの名無しさん [2016/09/17(土) 13:14:26.86 ID:ejCT2vp9.net] >>667 IErrorRetCodeLong = GetPrivateProfileSectionNames(strValue, StrLength, FileString) IErrorRetCodeLong = GetPrivateProfileSection(SecNameString, strValue, StrLength, FileString) 'IErrorRetCodeLong = バッファに格納された文字数が返ります(終端のNULL文字1つを除く)。バッファのサイズが足りない場合は、nSize-2が返ります。 と、 ' INIファイル内の全てのセクション名を取得する。 ' INIファイル内の指定のセクションの全てのキーとその値を取得 関数の戻り値が NUL文字区切り、NUL+NUL文字が末尾。 直接 OPEN して読み取る手法もあるにはあるが、 INIファイルに書き込んだ直後はバイナリファイルになっていて、 しばらくたってから、テキストファイルに内容が変化する という状態なので、書き込み終了時刻からの待ち時間を求めるのが面倒。 そのため、上記2つの関数を使っている。
704 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 14:10:58.39 ID:ejX8tU80.net] >>668 なるほど windows.biヘッダを見てみたけど、バッファとして扱うstrValueはzstring ptr型だな 恐らく該当部分のバイナリをzstring ptr型にキャストして返しているだけだな なら話は簡単だ ヌル文字をデミリタとして、strValueをループにかけて切り出せばいい こんな感じでいけると思う dim as integer count dim as zstring ptr st = strValue while count < StrLength dim as string tmp = *st dim as integer length = len(tmp) + 1 count += length st += length print tmp wend
705 名前:デフォルトの名無しさん [2016/09/17(土) 14:21:52.60 ID:ejCT2vp9.net] >>667 >ヌル文字(\0)は文字列型の終端文字(ターミネータ)として使っている マイクロソフト系だとその通りなんだけど、 IBM-360系(国産の互換機の取説より)は、配列の大きさと使っている文字数が先頭4Wordに書かれていて、終端文字がなし。ただし、PACKファイル(UN-PACKファイルと対をなす)は、0Dで0Aがセクターの最終を示す。0Aがあったらば次のセクターを読む。ファイルの末尾が1A。 プリンターやパンチでは0D,0Aの後に00が続いて送信されるので00は固定長の送受信ブロックの長さ合わせに使われていました。ここに未定義のコードを送るとスプールが致命的ハードの障害と判断して停止する。 PET系は、末尾が0Dだったか0Aだったか、1Aだったか忘却。 N88系は、文字変数のテーブルが理解できなくて、逆汗に挫折。 最初にいじった学校の機械は、生徒にSAVE禁止命令が出ていたので、その日に手入力して、サヨナラの毎日だったので、内部変数は見ていません。 事務BASICも逆汗していません。 文字変数や文字定数の最後に00を書き込んで可変長にする場合もありますが、 それ以外もあります。
706 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 14:28:22.72 ID:ejX8tU80.net] >>669 取り敢えず、書き殴るだけでは何なので試してみた dim as ubyte a(13) = {&h41, &h42, &h43, &h44, &h00, &h45, &h46, &h47, &h00, &h48, &h49, &h4A, &h00, &h00 } dim as integer size = 14 dim as integer count dim as zstring ptr st = cast(zstring ptr, @a(0)) while count < size dim as string tmp = *st dim as integer length = len(tmp) + 1 count += length st += length print count, tmp wend
707 名前:級ハ: 5 ABCD 9 EFG 13 HIJ 14 [] [ここ壊れてます]
708 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 14:39:04.34 ID:ejX8tU80.net] >>671 もう少し工夫すればcount変数も必要無いな 早い話、ポインタ演算すれば良いってことだな
709 名前:デフォルトの名無しさん [2016/09/17(土) 15:01:17.31 ID:ejCT2vp9.net] >>669 ポインターは難しいですね。私のコピーミスが考えられるので全部送ります。4時から私用があるのでこれで失礼します。色々ありがとうございました。 Dim IniFile As String, FileNoLong As Long, Zcount As Integer = 0 IniFile=ExePath+"\VBini.txt" FileNoLong = Freefile ( ) Open IniFile for output As #FileNoLong Print #FileNoLong ,"宣言開始" Dim strValue As String * 5120 Dim As Long StrLength, IErrorRetCodeLong IErrorRetCodeLong = GetPrivateProfileSectionNames(strValue, StrLength, IniFile) Print #FileNoLong ,"取得文字数";IErrorRetCodeLong ;"/";5120 dim as integer count
710 名前:デフォルトの名無しさん [2016/09/17(土) 15:02:24.06 ID:ejCT2vp9.net] Dim as zstring ptr st = strValue 'DimChk4.bas(141) error 24: Invalid data types in 'Dim as zstring ptr st = strValue' ' 以上のコンパイルエラーが発生。 Print #FileNoLong ,"ループ開始" While count < StrLength Dim as string tmp = *st dim as integer length = len(tmp) + 1 count += length st += length Zcount =Zcount+1 Print #FileNoLong ,Zcount;"tmp";tmp If (Zcount>1000) Then Print #FileNoLong ,"ループ強制終了": Exit While Wend Print #FileNoLong ,"ループ終了" Close #FileNoLong 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
711 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 15:27:56.23 ID:ejX8tU80.net] >>673 GetPrivateProfileSectionNamesの第一引数ってLPSTR型 これはFreeBASICではzstring ptr型だから >dim strValue as String*5120 strValue >IErrorRetCodeLong = GetPrivateProfileSectionNames(strValue, StrLength, IniFile) この時点でおかしい >Dim as zstring ptr st = strValue 型が違うから、そりゃエラー出るわな
712 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 15:47:18.80 ID:ejX8tU80.net] >>673 Dim IniFile As String = ExePath+"\VBini.txt" Dim FileNoLong As Long = Freefile() Open IniFile For output As #FileNoLong Dim strValue As ZString*5120 Dim strValuePtr As ZString ptr = @strValue Dim StrLength As Long Dim IErrorRetCodeLong As Long = GetPrivateProfileSectionNames(strValuePtr, StrLength, IniFile) If IErrorRetCodeLong Then End Dim count As Integer Dim Zcount As Integer While count < StrLength Dim As String tmp = *strValuePtr Dim As Integer length = Len(tmp) + 1 count += length st += length Zcount += 1 Print tmp If Zcount > 1000 Then Exit While Wend 分かりやすいように整形してみた 途中のIf分は、エラーコードを拾っているのなら、その判定が必要でしょ Zcountの存在意味が分からないが、まあいいや
713 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 16:01:13.10 ID:ejX8tU80.net] >>673 あと余計なお世話かもしれないが、システムハンガリアンを使うのは時代遅れ 静的型付け言語であるFreeBASICにおいても全く無意味な代物 やめろとは言わないが考え直すべき
714 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 18:11:44.06 ID:ejX8tU80.net] >>676 >st += length ミス strValuePtr += 1 分かっていると思うけど、一応もう1つ指摘しておくよ >Open IniFile For output As #FileNoLong この部分は、ファイルオープンエラーが起こり得るから If Open(IniFile, For Output, As #FileNoLong) Then ... EndIf ってな感じで、エラー処理挟むと良いね
715 名前:デフォルトの名無しさん mailto:sage [2016/09/17(土) 18:28:33.74 ID:ejX8tU80.net] >>676 書こうと思って失念してたのが、もう1つあった 変数宣言と初期化は統一するべき FreeBASICはBASICなだけあって親切な言語だから 変数宣言時にその型のデフォルト値で初期化してくれる だけれども初期値が用意してあるなら、ちゃんとそれで初期化すること 理由は、初期化の後に代入するという2つの処理が挟まれるから Dim As Integer a ' 暗黙的に0で初期化 a = 1000 ' 1000を代入 Dim As Integer a = 1000 ' 1000で初期化のみ 些細なことのようだけど、こういった部分をしっかりやると 処理速度も向上し、無駄な行数を減らせ、読み易いコードになる >>634 で変数宣言を必要な場所でするべき、と言ったのもそういう理由から
716 名前:デフォルトの名無しさん [2016/09/18(日) 12:45:36.72 ID:a7cHaCPR.net] >>677 >システムハンガリアンを使うの https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95 より、たぶん接頭語のことかな。 これは、Fotran 6, 77の頃から使っているもの、 I-N が整数、A-H, O-Zが実数より サブルーチンの引数名が大域変数名と同じな場合に、小文字のiをつける 保守用変数は、Zで始める が今も使っている(変数名を8文字程度以下に抑える動作試験ルーチンなどで)もの。 「str」等の3文字の変数は、マイクロソフトのサイトなどの内容のコピーで 下手に変数名を書き換えると動作しなくなるので そのまま、使っている。 V.B.のバージョンが6.0の為。 >>676 >Zcountの存在意味が分からない これは、保守用変数。 While-Wend, Do-Loop, For-Next 等のループ命令で、 ループ回数が想定外の回数発生した場合に、異常終了するためものも。 For I=1 to 10: I=1: Next I なんて、分量が多くなるとなかなか気が付かない誤記載が発生したときのもの。 >>675 >型が違うから、そりゃエラー出るわな Basic は型を多少間違えても、適当に直して解釈してくれる と思っていたから、機械語・スーパバイザー関連以外はチェックしないでいた。
717 名前:デフォルトの名無しさん [2016/09/18(日) 12:45:59.67 ID:a7cHaCPR.net] >>679 FreeBasic になって、Dim に初期値が規定できるようになったけど JIS-Basic では、規定していないので、不定の値が入る。 非実行文の宣言文を書いて、実行文で初期化する という慣習の名残。 Fotran 77等では、Const で初期値を入れて宣言の初期値を設定できるようになったが、 Const は定数という意味合いが強いので、使っていなかった。 定数で変更を認めない場合は(命令語忘却)を使っていました。 >>678 If Open(IniFile, For Output, As #FileNoLong) Then この構文は知らなかった。
718 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 14:04:30.43 ID:/Q0b75iC.net] >>680 そのマイクロソフト自身も現在はシステムハンガリアンの使用を禁止しているよ 動的型付け言語ならまだ有効だと思うけど、今となっては悪習の1つだな アプリケーションハンガリアンは使い方次第では有効だから良いけどね 強制するつもりはないから、あくまで参考程度に聴いてくれると助かる >Basic は型を多少間違えても、適当に直して解釈してくれる 暗黙のキャストはFreeBASICでもあるけれども(例:double型からinteger型への代入) 値型とポインタ型は全く別物だから、暗黙のキャストを通してしまうと とんでもない誤動作が起きてしまうから、コンパイラが知らせてくれるのよ 以前にポインタ型は参照型ではないと言ったのも、その理由から 例えば、integer型をinteger ptr型に暗黙的に代入できたら integer型の数値がアドレスに変換されて 別のアプリケーションが専有するメモリや未定義のメモリ領域を参照して とてつもない破壊活動が行われてしまう アセンブリをやっていたなら、その辺りの怖さを知っていると思う
719 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 14:20:26.05 ID:/Q0b75iC.net] >>681 そういう習慣は、言語に合わせて替えていくべきだと思うよ そういえば、>>676 のコードではconstを気にしていなかったけど 変数宣言で変化のないものは定数とするべきだな、よく忘れるw >>676 のコードの動作確認していないけれど、動いてる? 色々と興味深い話、ありがとね、凄く勉強になるよ Fortranとか名前位しか知らないよw
720 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 14:47:25.17 ID:/Q0b75iC.net] >>682 >integer型をinteger ptr型に暗黙的に代入できたら FreeBASICでは「警告」しか発しないので注意ね コンパイルは通ってしまう 古いコードとの互換性の為だと思うんだけど はっきり言ってコンパイルエラーで良いと思うんだけどね
721 名前:デフォルトの名無しさん [2016/09/18(日) 21:13:04.36 ID:a7cHaCPR.net] >>682 >別のアプリケーションが専有するメモリや未定義のメモリ領域を参照して インテル系CPUの特徴なんだよな。 マルチタスク用CPUだと、メモリー保護用レジスタがあってデータ領域しか読み書きができないようになっている。 しかし、インテル系はシングルタスク用なので、この手の保護レジスタが存在しない。 多分、インテルが特許を持っていないので、使えないんだと思う。 8086の頃から8080の拡張だからと言われていること。 逆に言えば、 Int 21 53(だったかな)でシステム変数のES:DIを入手して、システム変数を直接参照していたソフトがあった。 MS-DOS 3 → 5の変更で、BYTE変数がWORDになって、データがずれて、この手のソフトが全滅したときがあった。 システム変数を読み取りし放題だから、いろいろなことができる というのも、 インテル系CPUの特徴。先頭アドレスの割り込みテーブルの一部に全レジスターの出し入れが可能で、頻繁に実行するようになったので、領域が重なる部分が使われなくなったとか、聞いている。 割り込みテーブルなんてユーザー(システム以外のタスク)が操作してはいけないものなんだけど、ここをユーザーが操作することで多くのソフトが作られている。 >>683 、>動いてる? 動かなかった。ZString でAPIを参照すると、NULで切れてしまう。 String で警告エラーを見ながら、参照するしかないみたい。 ライブラリーのに互換のために作成するけど、 セクション名キー名一覧は、ネスケ社がMS社に対して公開を求めた60個ぐらいの非公開参照だったと思う。 だから、通常の使用では直接指定するので使わないけど、芋蔓状に子プロセスを使った複数のタスクの同期には使わざるを得ない。 今のところ使うけど、近い将来、パンチラに戻すなり、新規に作成するなりする予定。 今のパソコンは、メモリーを気にしなくても済む(リージョンの壁、48KB, 32KB, 64KB, 640KB, 720KB, 16KBの壁が実質的にない)ので 20-30KBのファイルだったらば全部読み込んで、主記憶に保存して、主記憶をバッファ記憶の代わりに使うという手法が使える。 外部記憶に保存し続けるパンチラではなく、他の方法に変更するかもしれない。
722 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 23:19:13.94 ID:/Q0b75iC.net] >>685 Windows APIを調べて書き直して、動作確認してみた 色々と勘違いと間違いがあったので動いたコード載せておくよ #Include "windows.bi" Const StrLength As Long = 5120 Dim IniFile As String = ExePath + "/VB.ini" Dim strValue As ZString*StrLength Dim strValuePtr As ZString Ptr = @strValue Dim strValueSize As Long = GetPrivateProfileSectionNames(strValuePtr, StrLength, IniFile) If (strValueSize + 2) = StrLength Then End ' この判定はもっと良い方法があるはず Dim count As Integer Dim Zcount As Integer While count < strValueSize Dim tmp As String = *strValuePtr Dim length As Integer = Len(tmp) + 1 count += length strValuePtr += length Zcount += 1 Print tmp If Zcount > 1000 Then Exit While Wend
723 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 23:20:56.59 ID:/Q0b75iC.net] >>685 まず、ファイルオープンいらない APIにHandleを渡す必要無いのに何故ファイルをオープンする必要があるのかって思ってた そもそもFreeBASICはFreeFileでLong型のファイルナンバーで管理している 次にファイル名は、ini拡張子でないと読み込んでくれない GetPrivateProfileSectionNamesの第一引数にバッファのポインタ、第二引数にバッファサイズを渡す その戻り値はエラーコードじゃなく、使用したバッファサイズを返す バッファサイズが足りない場合は、指定したバッファサイズ
724 名前:-2の値が返る 横着なことせずに、ちゃんと調べるべきだった [] [ここ壊れてます]
725 名前:デフォルトの名無しさん mailto:sage [2016/09/18(日) 23:39:22.82 ID:/Q0b75iC.net] >>687 自分の勘違い間違いまとめ GetPrivateProfileSectionNamesにバッファへのポインタを渡すから 第二引数にバッファサイズを渡すのは至極当然のことなのに 使用したバッファサイズを返す値と勘違いしていた それも戻り値がエラーコードだと思ってたからなんだけど GetPrivateProfileSectionNamesがファイルのオープンから読み込みまで 全部引っ括めてやると思っていなかった だからファイルオープンが必要なんだろうと、ちょっと引っかかっていたけど そのまま流した ファイル名、これは全然動作に関係ないと思ってた INIもTXTも同じ物だしって単純な思考
726 名前:渡辺真 [2016/09/19(月) 10:52:13.45 ID:gmTLVgTb.net] >>686 事例として転載させていただきました。 http://makoto-watanabe.main.jp/freebasic/tipsEasyWindowsAPI.html の一番最後です。 ところで、これは、何を目的に、何をしているプログラムですか? (^^ゞ [] [ここ壊れてます]
728 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 15:28:11.43 ID:KoK4joax.net] >>689 コードをまるまる転載するのは褒められたものじゃないな 君が解析をして注釈するなり何なり手を加えたものなら こちらとしても 互 い に 有益な情報だと判断できるし このコミュニティの存在意義もあると考える 意味も分からず(情報を引き出すための素振り?)転載して何がしたいのか? そのコードの説明をしたら、それも一緒に転載するのか? 君もプログラムを組むのだろ?こんな短いコードならフローを追う位、朝飯前でしょ 一連のレスでコードに手を加えたり、相手に色々とアドバイスをしたのは 興味があったし、互いに有益になるからだ 知らない情報や興味深い話を相手は提示してくれているし、幾つか参考になったコードもあった アウトプットをしない人間はコミュニティにおいて信用されないと察するべき 唯でさえ日本語の情報が少ないニッチな言語だから 君の情報サイトは有益なサイトであると考えるけど、情報を軽んじていないか? 「情報を纏め上げる」と「情報をかき集める」は全く違う 五月蝿いようだけど、もうちょっとその辺りを熟考して欲しい 楽しく互いに切磋琢磨したいんだ
729 名前:デフォルトの名無しさん [2016/09/19(月) 21:59:38.45 ID:BIobMlJt.net] www.dotup.org/uploda/www.dotup.org1008298.zip.html に、参照前後や初期化を含めて全部含めて掲載しました。 結論として、 GetPrivateProfileSectionNames() 関数は恐ろしくて使えない です。 FreeBasic の使用者は比較的多数いますので、通常の使用によって、引数が化ける(引数の領域の書きつぶしが発生する)ことは考えられませんので。 自作サブルーチン Fun SepDblNulStringDump() の参照前・参照中は、変数 引数 DataValSU, DataValSU2 ともに 3 を定義でき、かつ、参照も可能です。 しかし、両引数は、関数の参照後に共に0,0 になってしまっています。 どこかで変数の食いつぶしが発生しています。 大域変数として、"SepDblNulStringDumpSU には保存できました。 また、サブルーチンの戻り値 SepDblNulStringDump には書きつぶされていない値が返されています。
730 名前:デフォルトの名無しさん [2016/09/19(月) 23:33:48.33 ID:BIobMlJt.net] >>686 agree.2ch.net/test/read.cgi/mango/1471892791/376-378 Dumpリストの掲載が禁止されているっポイ。
731 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 23:37:51.35 ID:KoK4joax.net] >>691 あら、GetPrivateProfileSectionNamesはtxt拡張子でも読めるな >>688 のファイル名云々のところは勘違いをしてしまったな >GetPrivateProfileSectionNames() 関数は恐ろしくて使えないです。 >FreeBasic の使用者は比較的多数いますので、通常の使用によって >引数が化ける(引数の領域の書きつぶしが発生する)ことは考えられませんので。 んー、WindowsAPIに限らずバッファのポインタとサイズを渡して その内容を書き換えるってのは普通にある動作だけどな バッファを再利用する際に初期化(&h00で埋める等)を忘れると バッファを何かしらの処理に掛ける際に誤動作を引き起こすけれども >自作サブルーチン Fun SepDblNulStringDump() の参照前・参照中は、変数 >引数 DataValSU, DataValSU2 ともに 3 を定義でき、かつ、参照も可能です。 >しかし、両引数は、関数の参照後に共に0,0 になってしまっています。 関数の引数に「byref」付けれ -lang fbにおいて、省略したら「byval」として見なされる -lang qbとfbliteにおいて、省略したら「byref」として見なされる 自分は関数の参照渡しと値渡しは、確実に記述するんだけど(加えてconst指定も) -lang fbに慣れるまで、そういう癖つけた方が良いな つか、-lang fbでコンパイルしているよね? やってることは、セクション名を取り出すだけだよね VBini.txtにlog保存やWindow
732 名前:の構築と処理ってのは分かるが それらを切り出して関数なり何なりにしないと 申し訳ないけど、色んな処理がごっちゃになって物凄く読み辛いコード [] [ここ壊れてます]
733 名前:デフォルトの名無しさん mailto:sage [2016/09/19(月) 23:51:01.46 ID:KoK4joax.net] >>692 ワロタw 自分が書いたwhile...wend処理は、バッファ内をポインタ演算して 一つずつセクション名を取り出しているだけ バッファ内がこうなっていたら [aaaaa][00][bbbb][00][cccc][00][00] 文字列の最後は&h00なのだから[aaaa]の先頭ポインタからstring型に値を入れると その部分だけが切り出される(ここ重要) で、ポインタを[aaaa]の長さとヌル文字分の長さ つまり、len(*str) + 1分移動してポインタを[bbbb]の頭に持ってくる それの繰り返し バッファとして使っている固定長文字列型を文字列と考えるんじゃなく バイト列と考えてみたらスッキリしない?
734 名前:デフォルトの名無しさん mailto:sage [2016/09/20(火) 05:31:50.64 ID:OvbuO/pb.net] >>691 昨日、あれからラッパー関数を作ったよ ファイルからセクション名を取り出して動的配列に格納する関数 コピペするなり、変更を加えるなり、好きに使ってくれて構わない 解説が必要ならこのスレで言ってくだされ www.dotup.org/uploda/www.dotup.org1008644.zip.html
735 名前:渡辺真 [2016/09/20(火) 20:10:04.79 ID:ScvT560c.net] >>695 example を up いただき有難うございました。 GetPrivateProfileSectionNames の使い方を教えていただき、感謝いたします。 早速、事例としてコピペさせていただきました。 makoto-watanabe.main.jp/freebasic/tipsEasyWindowsAPI.html ことろで、ini ファイルからセクション名を取り出すことが目的ならば、単純にテキスト・ファイルとして読む方が簡単のような気がするのですが。 例えば、次の掲示のように。 注:FreeBASIC で正規表現を使うには FB-win32-pcre-8.32.zip を下記でダウンロードする必要があります。 sourceforge.net/projects/fbc/files/Older%20versions/0.90.1/Binaries%20-%20Windows/Libraries/FB-win32-pcre-8.32.zip/download
736 名前:渡辺真 [2016/09/20(火) 20:21:40.29 ID:ScvT560c.net] #Include Once "pcre.bi" Dim FileNo As Integer Dim pattern As String Dim i As Integer = 0 Declare Function ExecRegExpr(RegExpr As String, InputStr As String) As Boolean pattern = "\[.+\]" FileNo = FreeFile Open "VB.ini" For Input As #FileNo If Err > 0 Then Print "ファイル入力でエラー": End Do Until EOF( FileNo ) Dim As String text Line Input #FileNo, text If ExecRegExpr(pattern, text) = TRUE Then i=i + 1 Print "セクション名" ; text EndIf Loop Print "セクション数" ; i Close #FileNo Sleep
737 名前:渡辺真 [2016/09/20(火) 20:24:25.91 ID:ScvT560c.net] Function ExecRegExpr(RegExpr As String, InputStr As String) As Boolean Dim re As pcre Ptr Dim error_ As ZString Ptr Dim erroffset As Integer Dim rc As Integer Dim OVECCOUNT As Const UInteger = 30 '' should be a multiple of 3 Dim ovector(OVECCOUNT-1) As Integer re = pcre_compile( RegExpr, 0, @error_, @erroffset, NULL ) If re = NULL Then Print "pcre compilation failed at offset "; Str(erroffset); ": "; *error_ Sleep End End If rc = pcre_exec( re, NULL, InputStr, Len( InputStr ),0, 0, @ovector(0), OVECCOUNT ) If rc < 0 Then Select Case rc Case pcre_error_nomatch 'Print "no match" Case Else 'Print "matching error"; rc End Select ExecRegExpr=FALSE Else ExecRegExpr=TRUE End If End Function
738 名前:デフォルトの名無しさん [2016/09/20(火) 20:49:37.29 ID:eyotWnv3.net] >>696 >単純にテキスト・ファイルとして読む方が簡単のような気がするのですが。 マイクロソフトの内部処理で、 INIファイルにアクセスがあると、システム(スーパーバイザー、kernel32.dll)が読みだして
739 名前:、ランダムファイルかバイナリファイルに書き直します。 書き直した状態で、しばらく使用し、不明の時間が経過した後に、テキストファイルとして出力します。 したがって、 INIファイルが不在の時に初期値を書き込んで初期化し、 直後に内容を読み取る とした場合には、後者は、バイナリファイル等になった状態になっていて、内容を読み取れません。 ですから、操作対象となるINIファイルに対する参照がない状態、 たとえば、該当ソフトを停止した状態で、ノートパットで中身を読み取り編集する、 等は可能ですが、 中身を操作することが前提のソフトの中で、テキストとして読み取る・テキストとして内容を書き替える、 等をすると、中身が復旧困難になる程度の破壊が発生します。 重複起動等の時の資源の管理が目的ですので、テキストファイルとしての操作はできません。 >>693 >つか、-lang fbでコンパイルしているよね? していません。 fbc -s gui (FbEdit初期値)です。 -lang スイッチを指定してみたら、何が何だかわからなくなって、 -exや-eexの指定もしない(指定してもOn ERROR GOTO 処理のコンパイルができない)で、初期値のままにしています。 [] [ここ壊れてます]
740 名前:デフォルトの名無しさん [2016/09/20(火) 20:58:51.84 ID:eyotWnv3.net] ShellExecuteEx(udtShellExecuteInfo) を使った、 チルドレン(芋蔓状に、複数のタスクを実行する手法、MS-DOS 2 の頃の手法) を実行するルーチンがあったんだが、タスク終了までの待ち状態と子プロセスのリターンコード取得ルーチンを作っておいた。 Exec というそのものずばりの命令を発見した。 SHELLEXECUTEINFO構造体の内容が、さっぱりわからないし、V.B. で作った内容は、変数が未定義でエラーになってしまうし、散々だった。
741 名前:デフォルトの名無しさん mailto:sage [2016/09/20(火) 21:04:46.67 ID:OvbuO/pb.net] >>696 まずさ、>>690 に対する言及はしないの? 自分は著作権に対して余り五月蝿く言う方じゃないけど、敢えて言わせてもらうわ 君のサイトはクリエイティブコモンズライセンスで縛っているでしょ その転載したコードも自動的に君が権利者となってそれに縛られるって事になるんだけど 公開されたコードだからといって著作物の権利の譲渡や放棄が明示されていないのに よくまあ、君が権利者となるライセンスを明記しているサイトに転載できるね >>695 は、>>691 に対して書いているからね 著作物の権利がどうなっているか分からない場合 事後報告じゃなく、ま ず は 断りを入れるのが先じゃないの? >>690 では、敢えて君のマナーや気構え程度にしか言及しなかったけど こちらが示した事に何ら反応も示さずに何故それを繰り返すの? 本気で失礼極まりないんだけど
742 名前:デフォルトの名無しさん mailto:sage [2016/09/20(火) 21:15:16.88 ID:OvbuO/pb.net] >>699 省略しているなら「-lang fb」がデフォルト値になる -「exx」はどっちでも、あった方が良いかなって程度 デバッグモードでコンパイルする場合は「-w all」を入れた方が良い コンパイラが知らせる警告レベルの設定
743 名前:デフォルトの名無しさん [2016/09/20(火) 21:40:15.70 ID:eyotWnv3.net] >>679 >些細なことのようだけど、こういった部分をしっかりやると >処理速度も向上し、無駄な行数を減らせ、読み易いコードになる これやると、ソースの互換性が失われやすい。 一見無駄に見えるルーチンもあるけど、 Basic は、 ちょっとした処理をその場でチョコチョコとつくりあげて、おっつけ仕事に使う 言語なので、処理速度の向上(本来がTSS用言語なのでもともと遅い)は考えない。 ライブラリーの場合には、エラーチェックを十分しておくと、どこで障害が起こったのかがはっきりわかる。 あいまいな状態で動くようにしてしまうと、原因の特定がほぼできない障害に陥りやすい。 これ怖いから。連立方程式やOR(オペレーションリサーチ)
744 名前:の解が正しいかどうかわからない、といういやらしい現象が待っている。 繰り返し法で鞍部問題に引っかかったらば泣くしかないから。 JIS-Basic の範囲ならば、大体の機械で動作する。互換が確保される。 Free-Basic 用の命令に書き換えてしまうと、他のBasicに移植が困難になりやすい。 Function になっているが、ほとんどのBasic はGosub 行番かGosub ラベルなので 移植を考えると、関数名の引数には戻り値を設定しにくい。 今、移植でけつまずいている部分のほとんどが、V.B.専用ルーチン部分。 >>697-698 もマイクロソフトのルーチンを使わないでJIS-Basicの範囲で自分で他の入出力も作ってしまえば問題にはならない。 [] [ここ壊れてます]
745 名前:デフォルトの名無しさん mailto:sage [2016/09/20(火) 21:56:50.67 ID:OvbuO/pb.net] >>703 少し前のレスでも言及したけど、FreeBASICはBASICだけどQBASICとは別物 BASICっぽいC言語+αって印象、OOPの要素が取り入れられたからね 誤解を恐れずに書くならC++ならぬ、C+みたいな位置付け 互換性がほしいなら-lang qbでやるべきだよ そのために方言があるのだから もし自分がその移植作業をするなら 仕様書だけ持ってきて、新しく書き直すなあ
746 名前:デフォルトの名無しさん [2016/09/20(火) 22:51:41.56 ID:eyotWnv3.net] >>703 続き。 Win系はマルチタスクなので、以下のような注意が必要。(岩波講座、情報科学のどこかに記載) 変数 AとBを入れ替える時に、作業変数 Cを用意して C = A A = B B = C とやるのが一般的だけど、これだとマルチタスクではうまく動かない。 変数 A, B, C を占有して、他のタスクがこれらの変数を操作しないように制限をかけて、実行すること という条件が入る。 16Bit時代の Win だからまともにやっているかどうか知らないけれども、 kernel32.dll という一つのソフトに操作権を独占させることで、複数のタスクからの操作を排除している。 個別のソフトが >>697-698 のようなことをしてしまうと、原則としてまともに動かないことになる。 >>704 >仕様書だけ持ってきて、新しく書き直すなあ 仕様書はない。 システム(スーパバイザー)を操作する一群の命令群とこれに使用するサブルーチン 複数のソフトで共通使用するサブルーチン をまとめただけだから。 Print using の仕様が QBとVBで大きく変わったから、付き合いきれないと、Fotranの文字化ルーチンを作ったとか もしている。 このサイトのどこかにライブラリーが保管されているけど、類似のライブラリーとして 不定倍精度 二進化十進数 (BCD)演算。 のルーチンもある。これは、最初に使った機械が ±16桁、指数部±99のBCDだった。 統計をいじるようになって、有効桁が足らなくなって作った演算で、ふつう使うことがない。 金銭を使うソフトだと、加減算だけだとしても千兆位までの桁を確保しないと桁落ちが発生したりもする。 乗算が含まれると倍かくほしないと、おかしなことになりやすい(利益の3%に1/2を乗じた額であって、1.5%ではない、というのが社会関係の人。計算の入れ替えができない)。 だから、仕様書はない。ちょっとした計算をするためのライブラリーだから。
747 名前:デフォルトの名無しさん [2016/09/20(火) 22:55:44.27 ID:eyotWnv3.net] >>704 >誤解を恐れずに書くならC++ならぬ、C+みたいな位置付け まことにすまない。C, C+, C++ いずれも持っているが、 内容を機械語に直して意味を解釈する、 という悪癖を持っているので、自分でソースを描けない。 当然、違いもわからない。
748 名前:デフォルトの名無しさん mailto:sage [2016/09/20(火) 23:12:11.08 ID:OvbuO/pb.net] >>706 ポインタ機能とOOP機能を有したBASICって意味合い程度よ VB.NETとQBASICの中間的位置付けとでも言ったらいいか
749 名前:デフォルトの名無しさん [2016/09/21(水) 00:12:17.24 ID:F6TA7JIm.net] >>
750 名前:707 ポインター、って、データテーブルのアドレスの値 OOP は、大域変数に限ると、共通領域 http://www2.nc-toyama.ac.jp/~mkawai/lecture/fortran/subroutine/subroutine.html (3) COMMON文 参照。 データ領域 DS:?? に変数を割り当てて、リンカーにスイッチをつけると、一覧表が出力される。 変数を直接移動するのではなく、8-64bit のアドレスの授受でサブルーチンコールをしているわけで このアドレスを使うことは、無意識に行っていた。言語によっては直接入手できる(関数名忘却)。 8080系では、DS:SI にアドレスを、CL又はCXにデータ長さを指定して、DS:DIに演算結果を返す、というサブルーチンを作ると、拡張性が容易になる。 このことかと思っている。岩波講座情報科学では、「頭の良いコンパイラーでは」と限られているが、 Zcount = Zcount + 1命令(ADD)を Zcount += 1 命令(INC)に書き換える等の紹介をしていた。 30年ぐらいたつから、普通のコンパイラーならば、このくらいの置き換え処理をしてくれているものと思われる。 OOPも、 128バイトのフィールドを確保して、フィールドを切り替えて、共通領域にコピー、それぞれの内容に合わせて、変数の別名を宣言 なんてやっていたので、PEEK, POKE で使っていた。 専用命令が使えるようになったということかな?。 [] [ここ壊れてます]
751 名前:デフォルトの名無しさん [2016/09/21(水) 22:07:16.78 ID:F6TA7JIm.net] For-Next に関する追加情報。 Dim As Integer IIA, Ien, Icount Ien =5 Icount =0 For IIA = 1 To Ien MessageBox(TakaHWND,"Hello IIA ="+Str$(IIA)+"IEN ="+Str$(IEN),"Messagebox caption",MB_ICONINFORMATION) Icount =Icount +1 If Icount>20 Then Exit For Ien = Ien+1 Next IIA MessageBox(TakaHWND,"Hello IIA ="+Str$(IIA)+"IEN ="+Str$(IEN)+"Icount ="+Str$(Icount),"Messagebox caption",MB_ICONINFORMATION) とやると、IIA =5を表示した後、ループから飛び出す。 For ループ内で、データ追加してデータ数が増える場合の処理、 ある種の再帰的処理なんだけど、For - Next 処理では実行不能。 For-Nextは、処理系によって変則的な動作が大きく変わるので、 開始値、終値、増分(?)をいじる場合には、目的の動作をするのかを調べる必要がある。 面倒だと思ったらば、Do-Loop を使うことも一つの選択だが、 Do-Loop 命令が存在しない処理系も存在する。そんな時は、IF と Goto でループを作ることになる。
752 名前:デフォルトの名無しさん [2016/09/21(水) 22:16:40.24 ID:F6TA7JIm.net] Dir$() 関数に関して、 Const As UInteger attrib_mask =fbDirectory Dim As UInteger out_attr Dim As String FileNameString IAdir = ExePath+"\" FileNameString = Dir(IAdir+"*.*", attrib_mask, out_attr) Do Until Len(FileNameString) = 0 MessageBox(TakaHWND,"Hello "+"("+FileNameString+")","Messagebox caption",MB_ICONINFORMATION) FileNameString=Dir(out_attr) Loop FreeBasic の Dir$() システム関数は 使っていたV.B.とは異なり、ディレクトリを読み取ることができる。 MSのシステム(スーパバイザー)参照 Dim FindData As WIN32_FIND_DATA FindNo& = FindFirstFile(IAdir$ + AAString, FindData) IA& = FindNextFile(FindNo&, FindData) 等は、使わないで済んだ。めでたい。
753 名前:デフォルトの名無しさん [2016/09/21(水) 23:58:33.44 ID:F6TA7JIm.net] '関連付けられている実行可能ファイル名を取得 に使われる、API(スーパバイザー)関数で、 IA = FindExecutable(FileString, IDirString, ExecutableFileNameString) を使う場合には 「#Include Once "win/shellapi.bi"」が必須
754 名前:渡辺真 [2016/09/22(木) 12:00:38.04 ID:arHLSSm1.net] >>701 >本気で失礼極まりないんだけど 気分を害させてしまい、まことに申し訳有りませんでした。 私のサイト
755 名前:ェクリエイティブコモンズの「表示 - 非営利 - 継承」を使っているのは、 第三者が、私の承諾を必要とせずに、複製したり、再配布できるようにするためです。 私の名前を出しているのは、文責を明らかにして、誤記修正などのクレームの宛先を明確にするためです。 貴方が作成していただいたプログラムを、私のサイトに掲示したのは、作っていただいたプログラムをできるだけ多くの人が利用できるようにしたい、という気持ちからです。 貴方のプログラムを、私のサイトに転載することをご了解いただけないなら、残念ですが削除いたします。 [] [ここ壊れてます]
756 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 12:45:49.56 ID:7BuONNwf.net] >>712 >私のサイトがクリエイティブコモンズの「表示 - 非営利 - 継承」を使っているのは、 >第三者が、私の承諾を必要とせずに、複製したり、再配布できるようにするためです。 理解しますが、他から転載するのは、そのライセンスに縛る行為です それは権利者の権利を害する行為になります 明確なライセンスを提示していないからといって、権利を放棄しているわけではありません その事を認識してほしかったのです まず確認してください それが製作者に対する最低限の誠意です >貴方のプログラムを、私のサイトに転載することをご了解いただけないなら、残念ですが削除いたします。 今回のことをこれ以上問題にするつもりはありません 転載していただいても構いません あと、質問は大いに歓迎しますが、まずご自身でどう理解したのかを提示した方が 相手も説明し易いですから、より良い回答を得られると考えてください 意思表示をしていただいて、有難うございます
757 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 12:49:10.86 ID:esuUIiS6.net] 他人の著作物を、勝手に使ってはいけない。著作者に権利があるから。 使えるのは、相手が許可している場合のみ 新しく自分で作って、サイトに貼れ。 人の著作物を勝手に使うな。危険! 訴えられるぞ
758 名前:デフォルトの名無しさん [2016/09/22(木) 12:54:03.22 ID:9b+w8gcu.net] 本来のライセンスを曲解しての干渉の義務化とこのスレの私物化は止めてくれ。 このスレは10年以上に渡る現行スレと言うより私物化の弊害で 停滞し続けていることが周知された状態だと思ってる。 何よりFreeBASICドキュメントのGFDLを遵守していないで時点で 関わるべきでないと判断してる。
759 名前:デフォルトの名無しさん [2016/09/22(木) 13:01:50.03 ID:9b+w8gcu.net] 数年振りにこのスレに書き込んだけどFreeBASICに関して このスレを放置して表立って活動しない理由は察してくれ。
760 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 13:41:17.03 ID:7BuONNwf.net] >>715 >本来のライセンスを曲解しての干渉の義務化 この部分は自分に対して言ってる?
761 名前:704 mailto:sage [2016/09/22(木) 15:12:55.32 ID:3YqamaKu.net] >>717 最初に、レスアンカーの省略で誤解させてすまない。 >>715-716 の書き込みはいずれもID:9b+w8gcu(>>713 )宛てでなくて ID:arHLSSm1宛(>>712 )宛て。 久々にこのスレを見たら数年前と同じような問題が起きてたので 注意喚起としての書き込みをしたつもりだったけど スレの流れを把握しきれていないタイミングで レスアンカーを省略したのは不味かったと反省してる。
762 名前:704 mailto:sage [2016/09/22(木) 15:17:37.36 ID:3YqamaKu.net] >>717 最初に、レスアンカーの省略で誤解させてすまない。 >>715-716 の書き込みはいずれも ID:7BuONNwf(>>713 )宛てでなくて ID:arHLSSm1宛(>>712 )宛て。 久々にこのスレを見たら数年前と同じような問題が起きてたので 注意喚起としての書き込みをしたつもりだったけど スレの流れを把握しきれていないタイミングで レスアンカーを省略したのは不味かったと反省してる。 IDミスったので訂正して再書き込みしたけど 後は余程のことが無い限り不定期巡回のROMに戻ってる。
763 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 16:10:31.77 ID:7BuONNwf.net] >>719 大丈夫、気にしてないよ 長い間このスレを利用してきて 彼は注意しても無視するから極力関わらないでいたんだ 2chで権利だ何だって言うのもどうかと思ったけれど 今回のことで流石にきっちり言わなきゃ駄目だなって思ったよ 自分のちゃっちいコードを転載されても痛くも痒くもないけど それでも他人の成果物を掠め取る行為は許し難い このスレを
764 名前:スとか日本国内のFBコミュニティとして盛り上げたいって気持ちがあるよ 誰もがコードを気兼ねなく提示し、意見交換を出来るスレにしたい それを実行している矢先だったからね っていうか、FBコミュニティって国内に無いよね?自分が知らないだけ?w [] [ここ壊れてます]
765 名前:デフォルトの名無しさん [2016/09/22(木) 20:41:39.56 ID:yFpkWppT.net] 大域変数用 Dim 文について。 *.bas ファイルの先頭においてある Dim 文は実行されないと思うのだが、 FreeBasic ではどのように処理されているのやら。 #include once "windows.bi" #Include Once "win/commctrl.bi" #Include Once "win/commdlg.bi" #Include Once "win/shellapi.bi" Dim As Long DammyReturnCode なんてやってもコンパイルが通ってしまう。 しかし、その後の Function 適当(適当) DammyReturnCode = 何かの関数() end Function なんてやると、 DimChk8.bas(35) error 41: Variable not declared, TakaDammyReturnCode4 in 'DammyReturnCode = 何かの関数()' のように、コンパイルエラー 41 が発生する。
766 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 21:15:52.39 ID:7BuONNwf.net] >>721 グローバル変数を殆ど使ったことがないから詳しくは言えないけど dim shared as Foo X のように書く ソースファイルに置く場合、他の一緒にコンパイルするソースファイルから可視化する為に extern as Foo X dim shared as Foo X ってexternを使う ちょっとあやふやな記憶なので自信なし マニュアル参照してね
767 名前:デフォルトの名無しさん [2016/09/22(木) 21:16:19.75 ID:yFpkWppT.net] Str$(), Str() 関数について。 Dim As String AAstring, bbString Dim As BOOLEAN AABool AABool =TRUE AAstring = Str$(AABool) AABool =FALSE BBstring = Str$(AABool) MessageBox(TakaHWND,"Hello ("+AAstring+")("+bbString+")","Messagebox caption",MB_ICONINFORMATION) とやると、{true, false} のどちらかが得られる。 V.B.cstr()関数の戻り値{True, False}とは異なるので要注意。
768 名前:デフォルトの名無しさん [2016/09/22(木) 22:15:25.48 ID:yFpkWppT.net] >>722 extern は、複数のモジュール(ファイル)に共通な変数の定義の模様。 >外部結合を持っている、変数、配列またはオブジェクトを宣言します。 makoto-watanabe.main.jp/freebasic/PgExtern.html 混乱と混沌を司る吾輩でも使いこなせなかった。 というのは、前書いたように、 いくつか、チョコチョコっと作るやっつけ仕事で作り上げたソフトから 共通部分を積み上げて作ったのが、いまいじっているライブラリー3-4MB。 命名法の共通性がないし、仕様も存在しない。 そんなわけで、複数のファイルにまたがる内容は、覚えきれない。 ライブラリーに入れる時に、命名法をあわせるけど、Basic を使っている限りは使うことはないでしょう。 OOPに相当する内容が Fotran の共通領域、Block Common 文 www2.nc-toyama.ac.jp/~mkawai/lecture/fortran/subroutine/subroutine.html (3) COMMON文 参照 で、一つのファイルで使う変数を一つのCommonBlock にまとめてしまう。 Fotran では一つのCommonBlock 領域に複数の宣言をしてもコンパイルが通ってしまうので 使用するファイル以外は、まったく使わない主記憶領域が存在する(ブラックボックス化ができる)だけ、となる。 extern を使って複数のファイル(モジュール)にまで影響を及ぼす宣言をすると、自分では理解できない、なにか、ができてしまいます。 V.B. でやって、 まとまらなくなって、そっくり全部捨てて、もう一度く見直す、 ということを何回かやっています。 この方法は、ロボットのソフトを管理していた同級生が、 客先で不調になったロボット用ソフトのデバックがうまくいかなかったときに 「同じ仕様書でソフト会社にもう一度発注する」 という方法が唯一の対応である と、教えてくれまして、 実労1週間(8*5 = 40時間、休日プログラマーの私としては実質1か月)で、対応が取れなかったときに使っています。 Fotran を使っていたころの名残で、管理情報はすべて共通領域に
769 名前:保管します。ダンプルーチンを作っておけば、共通領域の変数異常は比較的簡単に発見できますから。 [] [ここ壊れてます]
770 名前:デフォルトの名無しさん [2016/09/23(金) 21:04:06.75 ID:G4FKiQQT.net] 'GetSystemTime udtSystemTime: 'V.B.用 現在の時刻を国際時間で返す をFreeBasic で使おうとして、 'declare sub GetSystemTime(byval lpSystemTime as LPSYSTEMTIME) とあるのだが 'IAA=GetSystemTime (udtSystemTime): '(不動)現在の時刻を国際時間で返す 'Call GetSystemTime (udtSystemTime): '(不動)現在の時刻を国際時間で返す と動かなかった。 ファイルのタイムスタンプを統一する(一つのソフトができたらば、関係ファイルの時刻を統一しておくと、Libのバージョンアップに伴う、引数・名称の変更などの障害を避けられる)必要があり、 ファイルのタイムスタンプに記載する時刻の取得が必要になった。 www.orchid.co.jp/computer/cschool/CREF/gmtime.html >一般的なプログラム使うことは無いと思います。 なんて人もいる。
771 名前:デフォルトの名無しさん [2016/09/23(金) 21:08:42.46 ID:G4FKiQQT.net] そんな中見つけたのが makoto-watanabe.main.jp/freebasic/ProPgCruntime.html で、 www.orchid.co.jp/computer/cschool/CREF/gmtime.html に記載があり、動作試験。 'type time_t as integer 'type tm ' tm_sec as long ' tm_min as long ' tm_hour as long ' tm_mday as long ' tm_mon as long ' tm_year as long ' tm_wday as long ' tm_yday as long ' tm_isdst as long 'end type Dim Atime As time_t Dim Btime as tm Dim CCtimePtr as tm Ptr = @Btime 'Dim DPtime as ZString Dim DPtimPtr as Zstring ptr 'declare function time_ alias "time" (byval as time_t ptr = NULL) as time_t Atime = Time_(NULL) 'declare function gmtime (byval as time_t ptr) as tm ptr CCtimePtr =gmtime (@Atime) : ' gmtime(グリニッジ標準時への変換) 'declare function asctime (byval as tm ptr) as zstring ptr 'DPtimPtr = Allocate(80) DPtimPtr = asctime(CCtimePtr) MessageBox(TakaHWND,"Hello ("+*DPtimPtr+")","Messagebox caption",MB_ICONINFORMATION) と取得可能であった。
772 名前:デフォルトの名無しさん [2016/09/24(土) 09:58:50.24 ID:360mA6EK.net] ' 本家 'The functions Year, Month, Weekday, Day, Hour, Minute, Second allow to recover the different components of a date serial. '日本語訳 'Year, Month, Weekday, Day, Hour, Minute, Second 関数は、日付の連続値の、異なるコンポーネントを回復することを可能にします。 '名訳 https://translate.google.co.jp/#en|ja| 機械翻訳 '関数は、年、月、曜日、日、時、分、秒、日付のシリアルの異なる成分を回収することができます。 recover の直訳が, 回復する なんだけど。 ord.yahoo.co.jp/o/dic/RV=1/RE=1474764512/RH=b3JkLnlhaG9vLmNvLmpw/RB=/RU=aHR0cHM6Ly9rb3RvYmFuay5qcC9landvcmQvcmVjb3Zlcg--/RS=%5EADBWfxkGD33f8FC5_ElzCPt7zrKeK4-;_ylt=A2RivbhfzeVX5XQAgkRUmfd7 FreeBasic の内部表記 date serial を構成している年、月、曜日、日、時、分、秒を取り出すことができる関数がYear, Month, Weekday, Day, Hour, Minute, Secondである。 という意味だろうけど。 TimeSerial と DateSerialを使って、西暦0年0月0日0時0分0秒が設定できない。また、エラーが発生しない(参照直後ではErr=0)。 内部変数の構成がよくわからないけど、表現可能な期間がある模様。 入力側ではじいておかないと、発見が困難な障害になりやすい。特定が面倒くさい。
773 名前:デフォルトの名無しさん mailto:sage [2016/09/24(土) 11:41:07.49 ID:Dvsr/U8E.net] >>720 日本語翻訳ドキュメントの配布サイトは見たことあっても FBコミュニティは見たことない。 このスレの現
774 名前:状を見る限り、FBコミュニティの設立と活発化までは程遠いと思う。 時期的に次スレ継続有無の意見を挙げておくけど>>1 の意向と現状を見る限り 次スレは要らないと思ってる。 ここが匿名掲示板であることを理解出来ないコテハンが住み着いてる限り スレは廃れて行くだけ。 それでも新スレとしてリニューアルする場合はコテハン禁止を 周知徹底して欲しいと願う位。 サイト持ちのコテハンの降臨はスレを出張所化させる私物化行為に匹敵するから 他意によってテンプレ上でサイトのリンクが載っていても 余程のことがない限りコテハンとしての書き込みでスレに干渉はしないものだと思ってる。 特に自分のサイトの更新をPRする書き込みは自分で書く必要が無い。 必要だと思われればテンプレサイトを漁った人が勝手に報告してくれる。 基本的にコテハンとしての立場でスレを放置していて構わないし 匿名であればスレ書き込みも厭わないけどコテハン晒しながらの 常駐は勘弁して欲しい。 [] [ここ壊れてます]
775 名前:デフォルトの名無しさん [2016/09/25(日) 08:20:08.85 ID:HMNofkhl.net] レジストリ関係が何をやっても動かなかった。 RegQueryValueExstr() システム関数がなくなっていたため。 C:\FreeBASIC\*.bi に見つけることができなかった。 つまり、全部作り直し、ってこと。
776 名前:デフォルトの名無しさん [2016/09/25(日) 10:39:46.13 ID:HMNofkhl.net] >>727 のつづき。 処理が遅いので(CPU占有率30%よりも上がらない)、めげた。 ????/01/01 00:00:00 と ????/12/31 23:59:59 の2つしかチェックしていないけど -999年から4000年の間の年だと同じ値が帰ってきた。 数値から内部変数に変換した直後に、内部変数が指定した数値と同じものかを比較して、異なっていたらエラーとする という変換時のチェックしか見つからなかった。 5分間隔、5秒間隔、毎時で同期間チェックをかけたが、約10時間行って、止まらなかったので、めげた。 誰かやってみて。
777 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 11:13:09.23 ID:NTqjAG/u.net] >>727 , >>730 DateSerial()関数は、durationではなく、単に年月日をLong型表現に変換する関数 だから0年0月0日0時0分0秒は表現できない そのLong型の意味はエポック(1899年12月30日0:00)からの日数だよ、確か 因みに日付フォーマットのFormat()関数に渡すDouble型は整数部が日数、小数部が時間 vbcompat.bi系の関数は古臭いから使ってないな 自分はDateTime系のクラスを自作してるよ
778 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 11:19:00.33 ID:NTqjAG/u.net] >>728 概ね同意 次スレはその時になったらでいいかな 次スレ立てるにしても900番代後半でテンプレでも用意すれば良いね
779 名前:デフォルトの名無しさん [2016/09/25(日) 11:58:23.42 ID:HMNofkhl.net] >>731 エラーを返さない関数の場合に、障害を意味する特定の値が存在する場合がある。 この値を探そうとしてめげた。 日付演算については、内部表現型の違いで3系統(文字型変数、倍精度変数、Byte型変数)用意している。 文字型変数で日付の乗算等をやったらば、訳が分からなくなって、1-60までしかつかわないから Byte型変数に書き換えて演算した。加算は良かったのだが減算がおかしくなって、整数型変数を用意した。 作るのに1年ぐらいかかったので、うるう年、うるう秒の取り扱いで混乱している。 元々は、V.B.の日付演算関数の使い方がさっぱりわからなくて、同僚が作った文字演算による日付計算(2000年問題・夏時間非対応)の概要を思い出しながら作ったもの。 これを移植するときのバグ取り
780 名前:ルーチンとして、ある程度信頼できる日時を用意する必要があり、試した。 うるう年は対応したが、うるう秒が対応していない。和暦も対応していない(明治5年頃の切り替え等年号の切り替え日付が不明の為)。 RFC 0733,0822,0850,2822,3339には対応したつもりだが、比較試験していない。 タイムゾーン関係ルーチンが非常駐部にあるために、非常駐部から常駐部に移動して、、、とやらなきゃならないので 複数の*.frm ファイルで作ったV.B.用ルーチンの移植方法がわからないので、しばらくやらない予定。 子プロセスでつなぐ必要があるのかもしれない。 現在BEEP音関係の移植作業中。 'declare sub _beep (byval as ulong, byval as ulong) で Call型 さぷるーちん。 Dim As Long IAA IAA = _Beep(2000&, 300&) が使えない。 [] [ここ壊れてます]
781 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 13:17:44.25 ID:qEg7kZL2.net] >>732 数年先の話になりそうだけどリニューアルするにしても 最低限のリンクと最低限のローカルルールの表示だけで 立てられるから、その時になってからで問題ない。 簡単な要点としては、リンクの説明での実名晒しを避けることと コテハン書き込みを推奨しないこと位。
782 名前:デフォルトの名無しさん mailto:sage [2016/09/25(日) 22:03:27.55 ID:NTqjAG/u.net] >>734 アクティブだったdkl氏が他に興味を持っちゃって 本家の方も開発が停滞気味だし そのフォーラムも一時期の活気が無くなっちゃったしな まあ、ぼちぼちやってくしかないかな
783 名前:デフォルトの名無しさん mailto:sage [2016/09/26(月) 09:29:49.21 ID:gQftS+Lb.net] >>735 ある程度の完成段階で除虫された安定動作版がリリースされれば あとは使い倒すだけになるはずだけど、それと共にソースが肥大化し過ぎて 手を加えるのが困難になるとそれなりのスキルを持った人手と 管理が必要になるから停滞化してもやむなしと言ったところかも? それでもサポートエンドが付き物のプロプライエタリ・ソフトウェアと違って ソースに介入できる分、ぼちぼちやっていける余地もあると思う。
784 名前:渡辺真 [2016/09/26(月) 13:03:15.14 ID:gvhOMsvo.net] >>729 >レジストリ関係が何をやっても動かなかった。 >RegQueryValueExstr() システム関数がなくなっていたため。 下のページが参考になるかもしれません。 makoto-watanabe.main.jp/freebasic/tipsRegistry.html#ReadWrite
785 名前:デフォルトの名無しさん [2016/09/26(月) 21:37:26.43 ID:nPW4GvIj.net] >>731 エポック の意味が分からなかったので、ちょっと調べてみた。 www5e.biglobe.ne.jp/~emm386/2016/zeller/jd05.html https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93 これ、以前同僚がやった時に、うるう年の取り扱いが面倒、とサジなげた方法。 60,60,24,28-31,12 進演算で年月日時分秒ごとの配列を用意して、計算する という方法になった。 ただし、日本だから使えるけど、アフリカのどこかの国では、30日*12月, 5-6日の13月暦を使っているので、海外を考慮すると使えない方法。 この配列を文字列で保管するか、倍精度整数型、バイト型で保管するか、の方法がある。 取り扱いだと文字変数が楽だけど、演算を考えると倍精度整数型が必要。 演算を作ってみて、混乱した。 30日の1か月後は、1月をのぞいて30日なんだけど、31日の1か月後は、1日にした。 1月29-31日の1か月後は2月1日とした。 だけど、30日の1か月後が31になったりするとき(当日は数えない、翌日を0日とかぞえる)がある。 日付の演算はコリゴリ。 >>737 今日は疲れたので、明日試してみます。 >>736 普通に管理できるのは、100KB程度が限界。 高校の頃に作ったソフトを元に拡張に拡張を続けて現在に至っているソフトがある。 機械、言語、OSをとっかえひっかえ直しながら今に至るけど、 機能の追加は比較的簡単にできるけど、障害はどこが原因かさっぱりわからない時がある。 V.B.のときには、ソースが10MB、サブルーチン5000を超えて何が起こっているのか、わからなくなった。 マクロ命令を使っているので、再起呼び出しが日常的で、変数の書きつぶしが原因の場合が多い。 再起を認めない方向でマクロ命令を規定して、虫取りが終わったんだけど 言語の場合には、そうはいかないよね。
786 名前:725 [2016/09/27(火) 09:02:49.58 ID:RcindkQy.net] >>738 人の脳の容量では個人毎に自分に合った書き方をしないと 簡単に容量オーバー起こして何をしていたのか把握出来なくなる気がする。 元のコードがどんなに小さくても再帰呼び出しがあると管理の観点では再帰した分だけ 把握すべき事柄(頭の中のスタック消費)が増えたのと同じ作用があると思う。 再帰を無くしたことでコード量が増えても頭の中で整理出来るようになることの メリットは大きいと思う。 言語のソースだとその仕様によっては再帰の動作を保証する必要があるから 一筋縄には行かないと思う。
787 名前:渡辺真 [2016/09/27(火) 14:51:34.74 ID:S6jDwWW7.net] >>699 >重複起動等の時の資源の管理が目的ですので、テキストファイルとしての操作はできません。 私は、Ini-Object というものを見つけました。 makoto-watanabe.main.jp/freebasic/tipsWindowsIni.html 参考になるかもしれません。 'inifile オブジェクトを含めます #Include Once
788 名前:渡辺真 [2016/09/27(火) 14:53:04.52 ID:S6jDwWW7.net] 後半が切れたので再UP 'inifile オブジェクトを含めます #Include Once "inifile.bi" 'ファイル名前空間を設定します Using inifobj '作業文字列リスト(stringlist)を作成します。 Dim myList As stringlist Dim As Integer Index, ret Dim As String sret '新しい inifile オブジェクトを作成します Dim myIni As iniobj = iniobj("VB.ini") If myIni.InitStatus = FALSE Then Print "Error initializing ini object." Sleep End EndIf '全てのセクションを取得 Print "Reading all section names." myIni.GetSections(myList) For index = 0 To myList.count - 1 Print myList.Strings(index) Next Sleep
789 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 19:39:18.68 ID:vB2smJ5n.net] >>740 おいコラ、本家フォーラムでも同じことするな 何がPlease consent to this.だ 転載してから相手に同意を求めるな! 君は人の話を聞き入れる気が全くないんだな いい加減、本家フォーラムからもここからも去ってくれ 人の善意を踏み躙りリスペクトしない君と君のサイトは必要ない 本 気 で 消 え て く れ
790 名前:デフォルトの名無しさん [2016/09/28(水) 21:50:39.31 ID:x9CrL3iv.net] >>740-741 ありがとうございます。 現在レジストリー関係で四苦八苦していますので、こっちはちょっと先になるかと思います。 >>737 レジストリー関係いじるの開始。 一つのルーチンの引数がかなり類似しているので、引数を整理することで、中身を置き換えた。 比較的簡単なルーチン、sakura エディタ sakura-editor.sourceforge.net/index.html.ja の存在するディレクトリーの取得。これは、引数を合わせるだけでうまく動作した。 次に、システム情報を取得しようとして RootKey = HKEY_LOCAL_MACHINE SubKeyString = "Software\Micro
791 名前:soft\Windows\CurrentVersion" に9種類、かっては保管されていたのが、現在は5つのみ。残りは行方不明。 RootKey = HKEY_LOCAL_MACHINE SubKeyString = "Software\Microsoft\Windows\CurrentVersion\Setup\" に23種のディレクトリーと最終ドライブ名が保管されているはずだが消えた。 「const CSIDL_」で「C:\tool\FreeBASIC\*.bi」を検索すると、 C:\tool\FreeBASIC\inc\win\shlobj.bi に約60行 SHGetFolderPath() システム関数によって取得できるディレクトリーが取得できる。 こっちに切り替えとなる。 #Include Once "win/shlobj.bi" 宣言が必要なので要注意。 Declare 文が3桁になって専用の *.bi を作ったのは良いのだが #Include "ComCom1.bi" (適当な宣言) #Include "ComCom1.bi" なんてやったらば、書き込んだ *.bas ではなく、ComCom1.bi に重複宣言とのエラーメッセージが出た。 2重に宣言したことに気が付くのに時間がかかった。 [] [ここ壊れてます]
792 名前:デフォルトの名無しさん [2016/09/28(水) 21:51:34.09 ID:x9CrL3iv.net] 本家 www.freebasic.net/wiki/wikka.php?wakka=KeyPgReturn : Exit Function idiom. 日本語訳 makoto-watanabe.main.jp/freebasic/PgReturn.html : Exit Function 熟語。 名訳 終了関数のイディオム。 これ、:で切れるのではなく、 「 Function = expression : Exit Function 」文とほぼ同じ意味である、という意味のような気がしてきた。
793 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 22:12:45.95 ID:FWIJcGWT.net] 本家フォーラム!?
794 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 22:15:30.63 ID:FWIJcGWT.net] >>742 本家フォーラム!?
795 名前:デフォルトの名無しさん [2016/09/28(水) 22:45:10.43 ID:x9CrL3iv.net] 何回か岩波講座 情報科学 https://www.iwanami.co.jp/.BOOKS/01/X/010151+.html と書いたけど、これはそんなに肩がこる本じゃないから。 自習書、独学用教科書を目的に編纂された書籍なので、 独学で、算譜 https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0_%28%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%29 を体系立ててのりきろうとする人には何とか、道しるべになるだろう。 >>744 文とほぼ同じ意味である よりも 句とほぼ同じ意味である のほうかよいかな?。 >>739 Basic から再帰を取り除いたらば、文字しか残らないから。 Basic は、 再起処理が容易に行えること、 文字の取り扱いが容易であること から使われているので、再起処理ができないのであれば、Fortan で組んだ方がきれいだし search.yahoo.co.jp/search?p=Fortran%20free&sp=1&aq=-1&ei=UTF-8 ベクトル演算(配列を使った演算)なんて、Basic でノロノロやるよりもFotranの方が早いから Fotran もちょっと探せば、巨大なライブラリーがあるので、引数などを直せば、大体の処理系で実行できる。 ところが、文字演算だとFotranでは苦手で結構面倒くさい。スーパーバイザ処理をFotranで組んだこともあったけど、めんどうだった。 もっとも、コボルでシステムを組んだ会社があったらしい。スーパバイザー関係は機械語で自作したらしい。
796 名前:渡辺真 [2016/09/28(水) 22:52:32.47 ID:O3f8aY6K.net] >>744 >: Exit Function 熟語。 教えていただき、有難うございます。 これで文意が、つながりました。(^^ゞ 今、更新しました。
797 名前:デフォルトの名無しさん mailto:sage [2016/09/28(水) 23:31:30.54 ID:vB2smJ5n.net] >>743 申し訳ないが、>>748 の彼とそのサイトには触れないで欲しい FreeBASICのマニュアル翻訳にしても、コードの転載にしても 完全にライセンス違反の黒だから >>748 また無視を決め込むのか?
798 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 00:17:55.60 ID:Phxa9YOm.net] >>749 ライセンスどこ?
799 名前:デフォルトの名無しさん [2016/09/29(木) 00:37:07.11 ID:7Iw/NDZx.net] >>750 www.freebasic.net/wiki/wikka.php?wakka=GnuLicenses && &&& &&&&
800 名前:738でない名無し mailto:sage [2016/09/29(木) 00:42:47.90 ID:7Iw/NDZx.net] FreeBASICライセンスの内、ドキュメント部分のみの抜粋 Documentation The documentation is released under the GFDL license. >>751 の「&& &&& &&&&」は、誤記載。
801 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 00:49:45.47 ID:7Iw/NDZx.net] www.freebasic.net/wiki/wikka.php?wakka=LicenseGFDL GFDLバージョンは1.2
802 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 01:15:12.63 ID:7Iw/NDZx.net] GFDL1.2の派生はGFDL1.2であってクリエイティブ・コモンズ・ライセンスとは何の関係も無い。
803 名前:740 mailto:sage [2016/09/29(木) 02:59:31.24 ID:Xp210YqJ.net] GFDLの再利用は営利目的も含めて認められている。 GFDLの二次的著作物は全てGFDL。
804 名前:渡辺真 [2016/09/29(木) 10:20:38.15 ID:Gj1MSNoE.net] >>755 >GFDLの二次的著作物は全てGFDL。 私は、ライセンスを GFDL から CC BY-NC-SA に変更していることで「純白」ではない、と自覚しています。 GFDL と CC BY-NC-SA とで直面する大きな違いは、GFDL だと、公開に際してライセンスのテキスト全部を添付しなければならない煩瑣があることです。 4.H. Include an unaltered copy of this License. FreeBASIC のコミュニティが、ライセンスとして GFDL を指定した理由は、文書の更新履歴と更新者を明らかにしつつ、共有著作物として、Free に再使用(複製、改変、頒布)できるようにすること、だと思います。 そうだとすると、CC BY-NC-SA は、許容できる範囲の変更ではないか、と私は考えました。 私のサイトの内容について、万一、FreeBASIC のコミュニティから訴えられた場合に対応できるように、実名とメイル・アドレスを明記しています。 幸いに、今のところ、FreeBASIC のコミュニティからクレームを受け取っていません。
805 名前:740 mailto:sage [2016/09/29(木) 12:26:21.12 ID:0lcW9OHb.net] >>749 最小限度としての、こちらの判断です。 ・本家フォーラムのマナー上、GFDL違反を本家フォーラムに挙げること自体が お門違いと考えている。 ・GFDL違反はGFDL違反として扱う。こちらはGFDLに遵守するだけのこと。
806 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 19:03:21.46 ID:WGwuSJ1w.net] >>757 >本家フォーラムのマナー上、GFDL違反を本家フォーラムに挙げること自体が >お門違いと考えている。 本家巻き込むような事は流石にしたくない >GFDL違反はGFDL違反として扱う。こちらはGFDLに遵守するだけのこと。 同意 彼が是正してくれることを願って段階を踏んだけど それも無駄足だったみたい
807 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 19:25:50.14 ID:WGwuSJ1w.net] >>756 を読んでよく分かったわ 勝手にGFDL1.2の解釈を自分の都合の良いように変え 無断転載と事後報告を繰り返し 批判や指摘を無視して 訴えられなければそれで良いって考え 自己中心的で余りにも他者を蔑ろにしている >「純白」ではない この言い草からもそれがよく分かる 自己顕示欲と自己保身の塊、これを悪とは言わないが度が過ぎればって話だ 色んなコミニュティに参加してきたけれど どのようなコミュニティにおいても一番居てほしくない輩 コミュニティを根底から破壊する行為を平然とやる 他のスレで口汚く煽る人がいるが、それよりもずっと質が悪い
808 名前:デフォルトの名無しさん mailto:sage [2016/09/29(木) 22:19:08.05 ID:cc9t3rRT.net] >>758-759 (←746) 続けてコテハンは使いたくないので、レスアンカーで省略記載しました。 ・今後の日本語ドキュメントの版は枝分かれすることになると思います。 ・WikipediaのFreeBASICページ内のリンク記載については
809 名前: 編集者の自己責任として関与しません。 (と言うより、現状でWikipediaの編集者になるつもりもありません) [] [ここ壊れてます]
810 名前:デフォルトの名無しさん [2016/09/29(木) 22:59:43.37 ID:fXi0SOkZ.net] >>737 のアドレスの前半の内容で、 Dim As Long test2 という未使用の変数 test2 の宣言がある。 "ERR_OpenKey_"+Str(test) というエラーメッセージがある。 Left(buf_exp_sz,test) という文字演算がある。 使うときには、それなりの(バクとりをする)覚悟が必要。 test=ExpandEnvironmentStrings(Strptr(buf_sz),Strptr(buf_exp_sz), 1024) という引数がわかれば、自分で作り直すという選択もあるだろう。 混乱の原因として C:\tool\FreeBASIC\inc\win\winnt.bi の内容をあげる。 ' REG_QWORD と REG_QWORD_LITTLE_ENDIAN が同値なのはたぶん仕様 const REG_QWORD = 11 const REG_QWORD_LITTLE_ENDIAN = 11 6800と8080 の違いはわかるよね。https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3
811 名前:デフォルトの名無しさん [2016/09/30(金) 22:02:42.53 ID:WJIlfVnm.net] >>733 のつづき 'declare sub _beep (byval as ulong, byval as ulong) で Call型 さぷるーちん。 _Beep(2000&, 300&) とやったらば使えた。declare sub 宣言は予約語の宣言でもある模様。 >>747 でFree な Fotran を書いたけど、一覧のサイトは netnanet.info/fortran/compiler.html ライブの紹介は www.rcs.arch.t.u-tokyo.ac.jp/kusuhara/tips/linux/fortran.html www.arisoude-nakatta.com/n-linear-algebra-win-libraries-jp/ www.rcai.riken.jp/petadimension/s-softlib.html てなところ。 もっとも、Basic てマクロ命令を書いて、Rで処理、というお手軽な方法もある。 R については、ネットでは古くから定評のある群馬大の青木さん aoki2.si.gunma-u.ac.jp/R/ 2次元の作画は、ネットでは古くから定評のある www2e.biglobe.ne.jp/~isizaka/ 自分で作れないと思ったらば、マクロ命令が使えるソフトを見つけてきて Basic でマクロ命令のファイルを作って、コピーするだけ、で実行できる。
812 名前:デフォルトの名無しさん [2016/10/01(土) 09:42:17.29 ID:0740AvVo.net] やっと、V.B.のFrom_Resize() の入口にたてた。 細かいことは、"C:\FbEdit\*.bas" で (hBtn,x,y,97,31,TRUE と検索して。 Function WndProc(中略) As Integer 以下に、以下の宣言文 dim as long id, event, x, y dim hBtn as HWND 'Type RECT ’(中略、ロボットに引っかかったみたい) 'End Type dim reWin as RECT Dim rect as RECT Dim As Long SizeFlag, nWidth, nHeight Select Case uMsg 内の Case WM_SIZE 以下に追記 'ユーザーによってウィンドウサイズを変更された時に発生 SizeFlag=HiWord(wParam) nWidth = LOWORD(lParam) nHeight = HIWORD(lParam) 'const SIZE_RESTORED = 0 ’(中略、ロボットに引っかかったみたい) 'const SIZE_MAXHIDE = 4 'declare function GetClientRect(byval hWnd as HWND, byval lpRect as LPRECT) as WINBOOL 'declare function GetWindowRect(byval hWnd as HWND, byval lpRect as LPRECT) as WINBOOL MSReturnCode = GetWindowRect(hWnd,@reWin): '全体枠全体の寸法取得 MSReturnCode = GetClientRect(hWin,@rect): '全体枠内部の寸法取得 hBtn=GetDlgItem(hWin,IDC_BTN1): '個別表示物のハンドル(枠番号)を取得, hBtn=0でエラー x=rect.right-100 y=rect.bottom-35 MSReturnCode = MoveWindow(hBtn,x,y,97,31,TRUE): '個別表示物の枠の寸法を定義, 再作画を指示 'declare function MoveWindow(byval hWnd as HWND, byval X as long
813 名前:, byval Y as long, byval nWidth as long, byval nHeight as long, byval bRepaint as WINBOOL) as WINBOOL 関数はあっているかどうか知らぬ。内容をダンプしていないから [] [ここ壊れてます]
814 名前:デフォルトの名無しさん [2016/10/01(土) 09:44:47.55 ID:0740AvVo.net] ダンプルーチンは、 https://ja.wikipedia.org/wiki/%E3%82%B3%E3%82%A2%E3%83%80%E3%83%B3%E3%83%97 でもみて、適当に自分で作って。 初めて使ったダンプは、HDDの特定のセクターに関係内容が保管されていて NFL (New File Loder) を起動させないでモニターだけを起動する。 モニターからFDDにコピーして、FDDの内容を別の機械で解釈するという手法を使った。 過去30だったか60だったか個のエラーメッセージも保管されている。
815 名前:デフォルトの名無しさん [2016/10/01(土) 14:53:35.67 ID:0740AvVo.net] >>762 でRを書いたので、R関係。 rio2016.2ch.net/test/read.cgi/math/1410263098/l50 rio2016.2ch.net/test/read.cgi/math/1380168442/l50 echo.2ch.net/test/read.cgi/tech/1340339592/l50 R類似で rio2016.2ch.net/test/read.cgi/math/1284083650/l50 rio2016.2ch.net/test/read.cgi/math/1472051600/l50 シミ板。最近のRの話題でシミレーションがあるから。FreeBasic でシミやる人いるのかしら。 hanabi.2ch.net/sim/ いろんなソフトがあるから、手持ちのデータを各ソフトで読める形に直すのに、FreeBasic を使ってコンバート。 数値の区切り文字が、,(空白)# とか文字の区切りが"もじ"とか'もじ'とか。 けっこうめんどっちーんだわ 100個ぐらいまでならば手作業でやってもいいかもしれないけど、 50個超えたらばきつい。 >>763 でV.B.と同じ数値を使ってやったらば、うまくいかない。 V.B. では、 nWidth = LOWORD(lParam) nHeight = HIWORD(lParam) の12倍の数値を使っていた。 SizeFlag=HiWord(wParam) は間違い。SizeFlag=LOWord(wParam)だった。 V.B. の DoEvent に相当する命令が見つからない。 常に割り込みを認めている状態でのソフトの描き方 割り込みを禁止しないと実行できないソフトを書かなければならない の違いがあるから。
816 名前:デフォルトの名無しさん [2016/10/01(土) 15:22:32.94 ID:0740AvVo.net] #define IDC_EDT1 1001 という命令がある。 この数値から、どの機能の小間物と対応しているのか、 取得方法があるなら、しりたい。 Fontとか表示文字(Coption)を動的に切り替える方法があれば知りたいが、見つからないでいる。
817 名前:デフォルトの名無しさん [2016/10/02(日) 11:34:15.98 ID:82+jvpD4.net] >>775 のつづき。 表示文字(Coption)を動的に切り替える方法は、 If GetWindowTextLength(GetDlgItem(hWin,IDC_EDT1)) Then ' ok here we get only if user has typed some text GetDlgItemText(hWin,IDC_EDT1,@buff,SizeOf(buff)) SetDlgItemText(hWin,IDC_EDT2,@buff) SetDlgItemText(hWin,IDC_STC1,@buff) SetDlgItemText(hWin,IDC_BTN1,@buff) Else ' User didnt enter any text MessageBox(hWin,@Warning,@AppName,MB_ICONERROR) EndIf と見つかった。チュートリアル2参照。 .textと.Coption はこの方法で参照(値を読み取る)定義(値を設定する)できる。
818 名前:デフォルトの名無しさん [2016/10/02(日) 16:01:00.57 ID:82+jvpD4.net] 非表示がうまく描けない。 ドイツ語サイトを見つけた。 https://www.freebasic-portal.de/
819 名前:デフォルトの名無しさん [2016/10/02(日) 17:29:01.38 ID:82+jvpD4.net] >>768 非表示に成功。 DispStates1 = IsWindowVisible(hWin): 'ソフト全体のハンドルより表示状態を取得 hBtn=GetDlgItem(hWin, IDC_BTN2): '個別表示物のハンドル(枠番号)を取得, hBtn=0でエラー If (hBtn =0) Then DispStates2 = -1: 'ハンドルの取得に失敗 Else DispStates2 = IsWindowVisible(hBtn) EndIf 'hBtn = 0: DispStates3 = IsWindowVisible(hBtn): 'エラーを示すハンドルでの取得: 'DispStates3 =0,(その他の場合)を返す MessageBox(TakaHWND, "Hello ("+Str$(DispStates1)+") ("+Str$(DispStates2)+")"+Str$(DispStates3), "Messagebox caption", MB_ICONINFORMATION) 'https://msdn.microsoft.com/ja-jp/library/cc411211.aspx 'https://msdn.microsoft.com/ja-jp/library/cc364819.aspx 'blog.goo
820 名前:.ne.jp/masaki_goo_2006/e/41002821d5323a9b8c6efbb6b78c079c If (DispStates2 = 0) Then '非表示 DispStates3 = ShowWindow(hBtn, SW_SHOW ): '表示を指示 ElseIf (DispStates2 = 1) Then '表示 DispStates3 = ShowWindow(hBtn, SW_HIDE ): '非表示を指示 EndIf [] [ここ壊れてます]
821 名前:デフォルトの名無しさん [2016/10/02(日) 17:34:00.39 ID:82+jvpD4.net] 眺めた関係定数等は、以下の通り const SW_HIDE = 0 'ウィンドウを非表示にし、他のウィンドウをアクティブにします。 const SW_SHOWNORMAL = 1 'ウィンドウをアクティブにして表示します。 const SW_NORMAL = 1 ' const SW_SHOWMINIMIZED = 2 'ウィンドウをアクティブにして、最小化します。 const SW_SHOWMAXIMIZED = 3 'ウィンドウをアクティブにして、最大化します。 const SW_MAXIMIZE = 3 'ウィンドウを最大化します。 const SW_SHOWNOACTIVATE = 4 'ウィンドウを直前の位置とサイズで表示します。 const SW_SHOW = 5 'ウィンドウをアクティブにして、現在の位置とサイズで表示します。 const SW_MINIMIZE = 6 'ウィンドウを最小化し、Z オーダーが次のトップレベルウィンドウをアクティブにします。 const SW_SHOWMINNOACTIVE = 7 'ウィンドウを最小化します。 const SW_SHOWNA = 8 'ウィンドウを現在のサイズと位置で表示します。 const SW_RESTORE = 9 'ウィンドウをアクティブにして表示します。 const SW_SHOWDEFAULT = 10 'アプリケーションを起動したプログラムが 関数に渡した 構造体で指定された SW_ フラグに従って表示状態を設定します。 const SW_FORCEMINIMIZE = 11 'たとえウィンドウを所有するスレッドがハングしていても、ウィンドウを最小化します。
822 名前:デフォルトの名無しさん [2016/10/02(日) 17:34:51.75 ID:82+jvpD4.net] システム関数など ''ShowWindow 指定されたウィンドウの表示状態を設定します。 '' ShowWindowAsync 別のスレッドによって作成されたウィンドウの表示状態を設定します。 ''FlashWindow タスクバー上のボタンやウィンドウのタイトルバーを点滅させる ''ShowOwnedPopups 指定したウィンドウが所有するすべてのポップアップウィンドウを表示したり隠したりします。 ''OpenIcon 最小化されているウィンドウを、元のサイズに戻し、アクティブにします。 ''SetWindowPos 子ウィンドウ、ポップアップウィンドウ、またはトップレベルウィンドウのサイズ、位置、および Z オーダーを変更します。 ''SetWindowPlacement 指定されたウィンドウの表示状態を設定し、そのウィンドウの通常表示のとき、最小化されたとき、および最大化されたときの位置を設定します。 ''IsWindowVisible 指定されたウィンドウの表示状態を調べます。 → ShowWindow() '' IsIconic 指定されたウィンドウが最小化( アイコン化)されているかどうかを調べます。 '' IsZoomed 指定されたウィンドウが最大化されているかどうかを調べます。 C:\tool\FreeBASIC\inc\win\winuser.bi に書き込んだ内容がやたら増えていく。
823 名前:デフォルトの名無しさん [2016/10/02(日) 18:08:02.25 ID:82+jvpD4.net] >>743 つづき。 現在、レジストリーのダンプ260MBから関係データを探し出すのに四苦八苦。 ソフトの入れ替え、 IE → (なんだったか、めちゃくちゃ遅くで即消した)とか、NEの消失とか、 で、何の内容を収集するか、の判断に迫られている。 それて゜、ちょっと一休み。 >>699 の直接の原因となった内容が、サブルーチンの参照の後で戻り値がすべて0になる、という現象。 これが、>>763 で発生している。 一つのタスクで、極端に違うマンマシン入出力を取り扱う場合に、内容をわけて処理する場合がある。 IDC_GRP1 を使って、上部に選択、下に処理の枠(Group)を作成して行う。 FbEdit の タグ(Disp00.bas, Disp00.rc, Disp00.bi等)のような機能である。 このときに、位置情報が必要なので、変数を作るのが面倒なので、位置情報を保存する配列と操作するルーチンを作った。 ルーチン内で値が保存されているが、戻り値が常に0になった。仕方ないので、専用の大域変数を確保して、大域変数と直接やり取りをするようにした。 これが、答えになるかもしれない。 00区切り0000末尾文字列を取り扱う2つのルーチンで、同じルーチンを書くことで乗り切れるかもしれない。
824 名前:デフォルトの名無しさん [2016/10/03(月) 20:40:47.92 ID:5dSIzUzr.net] ToolTip 簡易ヘルプメッセージに関するメモ。 "C:\FbEdit" 内 *.bas を「ToolTip」で検索すると4ファイルヒットするので表示する方法が存在する。 そのうち一つが plaza
825 名前:.rakuten.co.jp/u703331/diary/200806040000/ http://plaza.rakuten.co.jp/u703331/diary/200806050000/ に使用変数名が類似。表示する文字などの定義方法は不明。 [] [ここ壊れてます]
826 名前:デフォルトの名無しさん [2016/10/03(月) 20:49:54.72 ID:5dSIzUzr.net] Function WndProc() 内 Select Case uMsg 内 Case WM_INITDIALOG 以後の内容は、起動直後に1回だけ実行される模様。 したがって、初期化ルーチンをここに置く。 大域に用意した文字配列 AA() を引数にして、別ファイル(モジュール)に送ると、別ファイルでコピー作業中にハングする。 別ファイル大域に配列を用意して(ReDim(???)で領域を確保が必要かも?)、 起動ファイル内に作られた配列コピールーチンを参照するようにすると、ハングしない
827 名前:デフォルトの名無しさん [2016/10/03(月) 21:02:04.53 ID:5dSIzUzr.net] FBedit で自動作成される なんたら.bi を 自動作成されないので手動作成した かんたら.bas 内に #Include したら、コンパイルエラーになった。 サブルーチン(Function なんたら())の入った *.bi を #Include するのは避けたほうが良いかも。 チェックボックスの使い方。 Select Case LoWord(wParam) 内に Case IDC_CHK1 'Dim RetVal1 as WINBOOL: '取得成功;True;0, 取得失敗;False;0以外、エラーコードを返す Dim IAuint As uint 'declare function IsDlgButtonChecked(byval hDlg as HWND, byval nIDButton as long) as UINT IAuint = IsDlgButtonChecked(TakaHWND,IDC_CHK1) 'const BST_UNCHECKED = &h0000 'ボタンの状態はチェックされません。 'const BST_CHECKED = &h0001 'ボタンの状態がチェックされます。 'const BST_INDETERMINATE = &h0002 'ボタンの状態は(ボタンに BS_3STATE または BS_AUTO3STATE のスタイルが設定されている場合のみ適用されます) 不確定です。 AAstring = "IDC_CHK1("+Str$(IAuint)+")" DammyReturnCode = なんたらMessageDisp(1, AAString) でチェックボックスのレ印の有無が取得できる。初期値設定は 'declare function CheckDlgButton(byval hDlg as HWND, byval nIDButton as long, byval uCheck as UINT) as WINBOOL 'const BST_UNCHECKED = &h0000 'ボタンの状態はチェックされません。 'const BST_CHECKED = &h0001 'ボタンの状態がチェックされます。 'const BST_INDETERMINATE = &h0002 'ボタンの状態は(ボタンに BS_3STATE または BS_AUTO3STATE のスタイルが設定されている場合のみ適用されます) 不確定です。 だが、BST_INDETERMINATEは指定不可。
828 名前:デフォルトの名無しさん [2016/10/03(月) 21:17:06.96 ID:5dSIzUzr.net] >>774 の続き。 多くの8080系言語では、配列などの巨大領域をスタック領域 https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF に、確保する。 8080のスタックレジスタは1つしかないので、一つのスタック領域に配列が確保される。 DS:SI ES:DI を使ったブロック転送よりも、高速だから、よく使われる。 起動ファイル(モジュール)のスタック領域が既にほぼ使われている、 と考えるならば、 起動ファイルから参照した別ファイル内領域(参照された側の領域)に配列が確保できず、 起動ファイル内領域(参照した側の領域)に、配列が確保される、 と考えるならば、 スタック領域の不足から、起動ファイルの領域を破壊して終了する(ハングする) という現象が説明つく。
829 名前:デフォルトの名無しさん [2016/10/03(月) 21:24:09.73 ID:5dSIzUzr.net] >>776 つづき。 Function WndProc() 内で、 配列を用意して、引数で別ファイル(モジュール)に送るという操作 は避けて、 大域に適当な静的配列を作ってFunction WndProc() 内で、値を定義し、 別ファイルのルーチンに制御を移してから、Function WndProc() のあるファイル内に作成した静的配列読み取りルーチンを起動する という手法を使う必要があるかもしれない。静的にしてしまえば、スタック領域が使われないから。
830 名前:デフォルトの名無しさん [2016/10/03(月) 21:28:39.69 ID:5dSIzUzr.net] >>777 つづき。 こんな、配列の作成場所を考慮するなんて、Basic じゃないよ。CとかFotranとかコボルだよ。 Basicインタープリター はどこかに巨大な数値領域があって、大域で使えて、どこにあるかなんて、気にしない言語なのに。
831 名前:デフォルトの名無しさん [2016/10/03(月) 21:36:44.51 ID:5dSIzUzr.net] >>777 つづき。起動ファイル内配列作成ルーチンの一例 Const PartsTSU = 6 Dim Shared PartsID(0 To PartsTSU) As Long => {0, IDC_CHK1, IDC_CHK2, IDC_CHK3, IDC_CHK4, IDC_STC1, IDC_STC2} 'Dim Shared PartsTypeList(1 To 6) As String => {"IDC_CHK1", "IDC_CHK2", "IDC_CHK3", "IDC_CHK4", "IDC_STC1", "IDC_STC2"} Function PartsTypeGet(iPatysTypeString() As String, i
832 名前:PartsID() as Long, iPartsTSU as Long) As Long Dim as Long IAA PartsTypeGet = 0 Redim iPatysTypeString(PartsTSU) As String , iPartsID(PartsTSU) as Long iPartsTSU = PartsTSU iPatysTypeString(1) = "IDC_CHK1" iPatysTypeString(2) = "IDC_CHK2" iPatysTypeString(3) = "IDC_CHK3" iPatysTypeString(4) = "IDC_CHK4" iPatysTypeString(5) = "IDC_STC1" iPatysTypeString(6) = "IDC_STC2" For IAA = 1 to PartsTSU: iPartsID(IAA) = PartsID(IAA): Next IAA End Function 使われている部品が、何かわからないので、何であるかを知らせるルーチン。 うまくいけば、起動状態の初期値、動作状態の変化、等を一元管理できる外付けファイルが作成可能。 もちろん、狂気と混沌が漂う、自己書き換えルーチンだから、あまりおすすめできない。 [] [ここ壊れてます]
833 名前:渡辺真 [2016/10/03(月) 21:54:48.23 ID:hlqiRfYS.net] >>727 >FreeBasic の内部表記 date serial を構成している年、月、曜日、日、時、分、秒を取り出すことができる関数がYear, Month, Weekday, Day, Hour, Minute, Secondである。 見逃していました。 毎度教えていただき、有難うございます。 今「回復」しました。
834 名前:デフォルトの名無しさん [2016/10/04(火) 21:12:01.77 ID:TnvyzfSK.net] >>769 Enable 関係の処理に成功。 Dim As BOOLEAN Abool, Bbool Dim hBtn As HWND Dim Long As IAA 既に宣言済み hBtn=GetDlgItem(TakaHWND, IDC_BTN2): '個別表示物のハンドル(枠番号)を取得 'declare function EnableWindow(byval hWnd as HWND, byval bEnable as WINBOOL) as WINBOOL 'declare function IsWindowEnabled(byval hWnd as HWND) as WINBOOL IAA = IsWindowEnabled(hBtn) : 'Ibool ={0;無効, (その他);有効} If (IAA=0) Then MSReturnCode = EnableWindow( hBtn, TRUE): 'ABool = {TRUE;有効, FALSE;無効} Else MSReturnCode = EnableWindow( hBtn, FALSE): 'ABool = {TRUE;有効, FALSE;無効} End If
835 名前:デフォルトの名無しさん [2016/10/04(火) 21:28:37.54 ID:TnvyzfSK.net] >>780 >>762 の 'declare sub _beep (byval as ulong, byval as ulong) で Call型 さぷるーちん。 _Beep(2000&, 300&) のように、C:\tool\FreeBASIC\inc 内の *.bi に記載されている無限にも見える declare 文で定義されている名称は、予約語と言える。 makoto-watanabe.main.jp/freebasic/CatPgFullIndex.html に記載されていない語の予約語もあることを記載してほしい。 「BEEP」は記載されているが、「_Beep」は記載されていない。 Unix 等では、「_Beep」は予約語にならないと思われるが #include で読み込まれる一連の *.BIファイルにて宣言されている語は予約語になりうると。 OS の違いからすべてを網羅するのは不可能だろうから、見つけ方だけでも記載してほしい。
836 名前:デフォルトの名無しさん [2016/10/04(火) 21:45:36.14 ID:TnvyzfSK.net] *.rc ファイルの編集画面で、左側に並んでいる小物を全部並べてみた。 CONTROL "EditText",IDC_EDT1,"Edit",0x50010000,3,3,29,15,0x00000200 CONTROL "IDC_STC",IDC_STC1,"Static",0x50000000,42,3,36,15 CONTROL "IDC_GRP",IDC_GRP1,"Button",0x50000007,81,3,42,12 CONTROL "IDC_BTN",IDC_BTN1,"Button",0x50010000,132,3,27,12 CONTROL "IDC_CHK",IDC_CHK1,"Button",0x50010003,168,3,24,12 CONTROL "IDC_RBN",IDC_RBN1,"Button",0x50010009,6,24,30,12 CONTROL "",IDC_CBO1,"ComboBox",0x50010003,48,24,30,15 CONTROL "",IDC_LST1,"ListBox",0x50010141,90,24,24,15,0x00000200 CONTROL "",IDC_SCB1,"ScrollBar",0x50000000,129,24,24,15 CONTROL "",IDC_SCB2,"ScrollBar",0x50000001,171,21,21,21 CONTROL "",IDC_TAB1,"SysTabControl32",0x50018000,9,42,27,15 CONTROL "",IDC_PGB1,"msctls_progress32",0x50000000,54,45,24,12 CONTROL "",IDC_TRV1,"SysTreeView32",0x50010007,87,45,30,15,0x00000200 CONTROL "",IDC_LSV1,"SysListView32",0x50010003,135,42,21,12,0x00000200 CONTROL "",IDC_TRB1,"msctls_trackbar32",0x50000000,168,45,24,15
837 名前:デフォルトの名無しさん [2016/10/04(火) 21:46:00.41 ID:TnvyzfSK.net] CONTROL "",IDC_UDN1,"msctls_updown32",0x50000000,3,60,36,15 CONTROL "",IDC_IMG1,"Static",0x50000203,30,63,33,12 CONTROL "",IDC_TBR1,"ToolbarWindow32",0x50000001,78,66,39,12 CONTROL "IDC_SBR",IDC_SBR1,"msctls_statusbar32",0x50000003,84,66,21,12 CONTROL "",IDC_IMG2,"Static",0x50000203,84,66,30,15 CONTROL "",IDC_DTP1,"SysDateTim
838 名前:ePick32",0x50010004,117,63,54,15 CONTROL "IDC_RED",IDC_RED1,"RichEdit20A",0x50010000,9,84,30,21,0x00000200 CONTROL "IDC_UDC",IDC_UDC1,"UDCCLASS",0x50000000,57,87,27,18 CONTROL "",IDC_CBE1,"ComboBoxEx32",0x50010003,96,87,24,15 CONTROL "",IDC_SHP1,"Static",0x50000004,138,84,30,15 CONTROL "",IDC_IPA1,"SysIPAddress32",0x50010000,12,108,27,18 CONTROL "",IDC_ANI1,"SysAnimate32",0x50000000,51,111,39,12 CONTROL "",IDC_HOT1,"msctls_hotkey32",0x50010000,102,108,27,15 CONTROL "",IDC_PGR1,"SysPager",0x50000001,138,108,24,15 CONTROL "",IDC_PGR2,"SysPager",0x50000000,180,66,9,21 CONTROL "",IDC_REB1,"ReBarWindow32",0x50000000,177,99,12,15 CONTROL "",IDC_HDR1,"SysHeader32",0x50000002,150,108,33,15 HScroll, VScroll の自動で作られる表題 IDC_SCB で一致。 HPager VPagerの自動で作られる表題 IDC_PGR で一致。 各行の4列目に書かれている文字が、GroupBox、Button、RadioButton、CheckBox で一致。 五列目の数値についても、0x50000000 が8種類で一致してくれている。 これの解明はキビシー。 スクロールにヘルプなどはいらないと思うので、初期値の名称を自前で変更しなければ、それなりの自己書き換えルーチンを作成できるような、気分になってきた。 [] [ここ壊れてます]
839 名前:渡辺真 [2016/10/05(水) 11:55:35.33 ID:28V7ff+C.net] >>782 >記載されていない語の予約語もあることを記載してほしい。 「渡辺注:」を追記してみました。 makoto-watanabe.main.jp/freebasic/CatPgFullIndex.html こういう趣旨でしょうか?
840 名前:デフォルトの名無しさん [2016/10/05(水) 22:27:41.54 ID:YonHd30p.net] >>785 助かります。 Beepとシステム時刻の取得で、苦しみました。 色々助言をいただいた方々も、Declare Sub (ルーチン名) 宣言されたマイクロソフト系ルーチンの参照方法がわからなかったみたいです。 (ルーチン名)(適当な引数、、、) と、「Call 」を除いた表記で参照するということを知らせる書き込みはなかったようですし。
841 名前:デフォルトの名無しさん [2016/10/05(水) 22:30:38.73 ID:YonHd30p.net] >>784 のつづき。*.rc ファイルの解釈から、 DispStyleUlong = VAL("&H" + RIght$(StyleString,4)) case "Button" 'スタイル項目で変化する 'https://msdn.microsoft.com/ja-jp/library/tf9hd91s.aspx IF (DispStyleUlong = BS_PUSHBUTTON) then PatsTypeNoLong = 2: PatsTypeNameString = "IDC_BTN": 'Button 0x50010000 BS_PUSHBUTTON ElseIF (DispStyleUlong = BS_AUTOCHECKBOX) then PatsTypeNoLong = 5: PatsTypeNameString = "IDC_CHK": 'CheckBox 0x50010003 BS_AUTOCHECKBOX ElseIF (DispStyleUlong = BS_GROUPBOX) then PatsTypeNoLong = 8: PatsTypeNameString = "IDC_GRP": 'GroupBox 0x50000007 BS_GROUPBOX ElseIF (DispStyleUlong = BS_AUTORADIOBUTTON) then PatsTypeNoLong = 17:PatsTypeNameString = "IDC_RBN": 'RadioButton 0x50010009 BS_AUTORADIOBUTTON end if case "SysPager" IF (DispStyleUlong = PGS_HORZ) then PatsTypeNoLong = 16:PatsTypeNameString = "IDC_PGR": 'HPager 0x50000001 PGS_HORZ ElseIF (DispStyleUlong = PGS_VERT) then PatsTypeNoLong = 16:PatsTypeNameString = "IDC_PGR": 'VPager 0x50000000 PGS_VERT end if
842 名前:デフォルトの名無しさん [2016/10/05(水) 22:31:45.50 ID:YonHd30p.net] case "Static" IF (DispStyleUlong = SS_CENTERIMAGE OR SS_ICON) then PatsTypeNoLong = 11:PatsTypeNameString = "IDC_IMG": 'Image 0x50000203 SS_CENTERIMAGE OR SS_ICON ElseIF (DispStyleUlong = SS_BLACKRECT) then PatsTypeNoLong = 22:PatsTypeNameString = "IDC_SHP": 'Shape 0x50000004 SS_BLACKRECT ElseIF (DispStyleUlong = SS_LEFT) then PatsTypeNoLong = 23:PatsTypeNameString = "IDC_STC": 'Static 0x50000000 SS_LEFT end if case "ScrollBar" IF (DispStyleUlong = SBS_HORZ) then PatsTypeNoLong = 21:PatsTypeNameString = "IDC_SCB": 'HScroll 0x50000000 SBS_HORZ ElseIF (DispStyleUlong = SBS_VERT) then PatsTypeNoLong = 21:PatsTypeNameString = "IDC_SCB": 'VScroll 0x50000001 SBS_VERT end if なんて感じだった。
843 名前:デフォルトの名無しさん [2016/10/05(水) 22:48:57.24 ID:YonHd30p.net] IDC_STC1, Static IDC_GRP1. GroupBox をいくらクリックしても、 Function WndProc() 内 Case WM_COMMAND 以降の処理が実行されない。 V.B. (6.0)と異なる。事象が発生しない模様。 別の事情が発生しているのかもしれないが、そこまで調べる元気はない。 未使用だけど、形状をそろえるためにいくつか、使われない部品を並べる場合がある。 ほぼ同じ形に統一しておかないと、使用者が間違う場合が多い。たとえば www.gen-info.osaka-u.ac.jp/MEPHAS/ave.html のような場合、 データ
844 名前:フ名称(通常ファイルに保管されているのでファイル名)を2つ選んで 危険率を設定して 計算を指示する。 前提条件を調べておいて、「この計算は実行できません」と表示する、あるいは、「計算が終わりました」と表示する 場合に、入力値が替わったらば、メッセージを消さなければならない。 メッセージボックスをクリックすれば、そのメッセージが消えるようにしてあるのが、作ったソフト。 これを再現しようとして、色々やったらば、メッセージボックス(Static)などをいくらクリックしても、事情が発生しないという仕様が見つかった。 スタイル指定をいじれば、事象が発生するようになるかもしれないが、今のところはいじるだけの気力なし。 [] [ここ壊れてます]
845 名前:デフォルトの名無しさん [2016/10/06(木) 17:37:44.97 ID:PqICm/6L.net] 考えてみると オープンソースやGPL系なら2chよりオープン2chなんかの方が向いてるかも あんまり人が居ないのが難点だけど 書き込むときの注意書きに著作権を2ch運営に譲渡する みたいな事が書いてあるから譲渡した以上著作権を主張したり出来ないんじゃないのかそもそも? 著作権周りは解釈なんかが難しいからなんともだけど
846 名前:デフォルトの名無しさん mailto:sage [2016/10/06(木) 18:03:50.35 ID:q4lKcQWv.net] >>790 レスに書いたコードに関して言えば、誰も著作権なんて主張しないと思うよ ただ、転載するにしても、その解説まで要求して それを転載する気満々な相手に良い印象を持てないよ 普通、引用するなら最低限リンク貼るし、転載なら先に断りを入れるしさ 更に2chと関係ない別鯖にうpられたコードまで無断転載するのだから 嫌でも著作権に触れないと分かってもらえないよ 指摘しても全く無視されるけどね 今後、ここで継続するか、別にコミュニティを作るか このスレの数少ないユーザで話し合っていきたいと思うね 個人的には別に移した方が良いかなって思ってるよ
847 名前:デフォルトの名無しさん [2016/10/06(木) 21:25:43.75 ID:vBIV5nd8.net] >>790 著作物か、単なる文字の羅列か、という問題がある。 誰がやっても同じ結果しか得られないもの、については著作物と認められない。 MSのAPI関係などは、だれが書いても同じ内容にしかならないので、著作物としては成立しない。 ただし、編集者が取捨選択(なんたら100選等)すると、選択した行為に限って著作権が成立する。 怖いのが、民法1条の規定と民法のこうじょりょうぞくの規定。 たとえば、3文字の語に著作権が存在するとする。簡略化してかな50文字中3文字を使う語は、50*50*50 語しか存在しない。 日本国内、1学年100万人の60歳まで生きて+50年間として100年間3文字の語を1名の人物が独占することになる。 そうなると、使える言葉がなくなってしまうから、著作権が成立すると日常生活に影響してしまう。 だから、認めるわけにはいかない。このよりどころとして、民法9?の公序良俗にもってゆくか、民法1条の権利の乱用にもってゆくか、の解釈がある。 細かいことは覚えていないから、正確な内容についてはそっちで調べてくれ。 同様に、報道と著作の問題、規約と著作の問題がある。
848 名前:デフォルトの名無しさん [2016/10/07(金) 20:39:25.61 ID:WZgq/8MK.net] >>788 の続き。 PatsTypeNoLong = 23:PatsTypeNameString = "IDC_STC": のように、PatsTypeNoLong とPatsTypeNameStringとの変換ルーチンを作成した。 >>787-788 のルーチンの正当性をチェックするためのルーチンで、 >>788 の出力値の片方からもう一つの値がえられるか 、を行うことで記載の間違いの有無を調べる方法である。 こん
849 名前:な場合、特に難しいことを考えずに select case PatsTypeNoLong case IS <=0 PatsTypeNameString ="": 'エラー Case 1 (中略) End select とやっていけば、比較的簡単に作成できる。 Public Function rcPatsTypeConvert(ActionType As Integer, PatsTypeString as String, PatsTypeNoLong as Long) As Long とActionType で、 PatsTypeString → PatsTypeNoLong、PatsTypeString ← PatsTypeNoLongの2つの Select Case 文で作成したまでは良かった。 なぜか、戻り値が0しか返ってこない。それぞれ100行、合計200行ぐらいの巨大なSelect Case 文が存在すると、戻り値の引数が化けるという現象が発生した。 そこで、 Type PearValSSIII ActionType as Integer AA as String BB as String IAA as Long IBB as Long IError as Long end type というユーザー定義名を用意して、 Public Function rcPatsTypeConvert(ActionType As Integer, PatsTypeString as String, PatsTypeNoLong as Long) As PearValSSIII と、戻り値をユーザー定義名にしたら、 rcPatsTypeConvert.(なんとか) = (なんたら) が全部エラーになったしまった。 [] [ここ壊れてます]
850 名前:デフォルトの名無しさん [2016/10/07(金) 20:41:26.04 ID:WZgq/8MK.net] そんなわけで、局所変数を引数にするのはあきらめて、 Dim Shared CmO1 as PearValSSIII という大域変数を用意して、大域変数に結果を保存、という手法に変わった。 Function, Type makoto-watanabe.main.jp/freebasic/PgFunction.html makoto-watanabe.main.jp/freebasic/PgType.html まあ、なんとか、部品関係の *.rc ファイルを読み取ることはできたけど、 *.rc ファイルの構造がわからない部分は結構ある。BEGIN-END の間だけ読み取っているに過ぎないから。
851 名前:デフォルトの名無しさん [2016/10/08(土) 11:11:57.43 ID:TrfpRvxJ.net] >>793 の続き。構造体(ユーザー定義変数)について。 引数に使った構造体を初期化しようとして、 Dim Shared BBB As TakaPearValSSL Function AAA(AA As TakaPearValSSL) As Long 'Dim AA As TakaPearValSSL = BBB 'DimCk10.bas(18) error 4: Duplicated definition, AA in 'Dim AA As TakaPearValSSL = BBB' AAA = 0 'Dim AA As TakaPearValSSL 'DimCk10.bas(17) error 4: Duplicated definition, AA in 'Dim AA As TakaPearValSSL' 'ReDim AA As TakaPearValSSL 'DimCk10.bas(20) error 62: Expected array, AA in 'ReDim AA As TakaPearValSSL' 'Dim AA As TakaPearValSSL = BBB 'DimCk10.bas(18) error 4: Duplicated definition, AA in 'Dim AA As TakaPearValSSL = BBB' AA = BBB End Function なんてやったけど、Dim も ReDim もコンパイルが通らない。 LET文「AA = BBB 」が通ったので、使いもしない変数を用意しておいて、コピーするという手法を使うことになる。 QB の頃は、 Type で宣言したモジュール(ファイル)以外のモジュールでは引数に使えない という制限があったはず。 Fotranの名前付き共通領域そのものの使い方しかできなかった。 だから、大域での使用が前提になってしまう。
852 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 14:39:52.41 ID:cRcu85q4.net] >>756 この人は、ライセンスを変更しているのだから、 そもそも双方の契約が成立する以前に、使っているから著作権法違反 食い逃げ、タクシーの無銭乗車と同じ。 有罪になるから、刑事告訴したら?
853 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 14:54:10.83 ID:cRcu85q4.net] そもそも、OSSライセンスは、Public Domain, GPL, MIT が常識。 お金を稼ぐものじゃない CC は、商用では有料だから、金が欲しい人がやるライセンスだから、目的が全然違う。 金目当てで、一部無料で使えるだけ OSSと一緒にしてはいけないし、このライセンスの人とは協力しちゃいけない。 最初から、目的が違う人々
854 名前:デフォルトの名無しさん [2016/10/08(土) 21:38:24.68 ID:TrfpRvxJ.net] >>793 比較的単純なルーチンでも発生。 Private Function GetIDInfo(nIDButton as Long, IselectPartsNo As Long, PatsTypeString as String, PatsTypeNoLong as Long ) as Long Dim as Long IAA IselectPartsNo = 0 IF (CommonEriaIniFig = 2) then For IAA = 1 To PartsTSU If (PartsID(IAA) = nIDButton) Then IselectPartsNo = IAA PatsTypeString = PatysTypeString(IAA) PatsTypeNoLong = PatysTypeNoLong(IAA) 'Exit For end if Next IAA else 'Fun taka06SW_CommonEriaIni() 未実行に付この処理ができない EndIf MessageBox(TakaHWND, "Hello "+Str$(nIDButton)+", "+Str$(IselectPartsNo)+", "+Str$(PatsTypeString)+", "+Str$(PatsTypeNoLong
855 名前:), "Messagebox caption", MB_ICONINFORMATION) GetIDInfo = IselectPartsNo End function IAA = GetIDInfo(AA.nIDButton, AA.IselectPartsNo, AA.ChkTypeString, AA.ChkTypeNoLong): 'AA.nIDButton → AA.IselectPartsNo, AA.ChkTypeString, AA.ChkTypeNoLong を定義 MessageBox(TakaHWND, "Hello "+Str$(AA.nIDButton)+", "+Str$(AA.IselectPartsNo)+", "+Str$(AA.ChkTypeString)+", "+Str$(AA.ChkTypeNoLong), "Messagebox caption", MB_ICONINFORMATION) 1回目の参照では AA.IselectPartsNo, AA.ChkTypeNoLongの2つとも正しい値を返すが、 2回目以降は、いずれも0を返す。 どこか変数の食いつぶしをしている。、 [] [ここ壊れてます]
856 名前:デフォルトの名無しさん mailto:sage [2016/10/08(土) 22:27:24.66 ID:cRcu85q4.net] CC は、商用では有料だから、金が欲しい人がやるライセンスだから、 Microsoft, mp3, Unity などと同じ。 基本は有料で、制限付きで、無料の人が少しいるっていうだけ。 Public Domain, GPL, MIT などの無料のOSSと、一緒に扱ってはならない ましてや、GFDLのような独自ライセンスを、わざわざ作る著作者は、 絶対に他のライセンスとは相いれないし、権利も放棄しない。 独自ライセンスとは、そういう表明だから ましてや、CCとは絶対に相いれないから、訴えられるはず。 CCは有料の割引サービスみたいなものだから、OSSの著作権者で、CCを好きな人は、まずいない これだけ警告されても、やめないのなら刑事告訴すればいい。 さらに海外でも刑事告訴されると、ロス疑惑の三浦氏のように、 入国した途端に逮捕されるから、一生海外へ行けない。 一生、時効にもならない 漏れは、宅建・行政書士など法律資格を持っているけど、 こいつは著作権法を何も勉強せずに、 他人の権利を勝手に使っている悪人だから、刑務所に入れるべき
857 名前:デフォルトの名無しさん [2016/10/09(日) 14:43:10.03 ID:jP/U8Kom.net] IF 文の比較演算子の解釈に注意。 IF (DispStyleUlong = SS_CENTERIMAGE OR SS_ICON) then と書いたらば、 DispStyleUlong = SS_CENTERIMAGE の場合と SS_ICON の場合が、Then 以降実行された。つまり、 (DispStyleUlong = SS_CENTERIMAGE) OR (SS_ICON) と解釈された。こっちが考えていた、 SS_CENTERIMAGE と SS_ICONとの論理和の結果がDispStyleUlongと等しい場合 には、 IF (DispStyleUlong = (SS_CENTERIMAGE OR SS_ICON)) then のように、()をつけて先に演算させる必要がある。 比較演算子と論理演算子の解釈の順番が違っていたみたい。 なお、SS_ICON と SS_がついているとおり、システム定数(型は不明)で、論理型の変数ではないから。
858 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 16:45:54.64 ID:ECXHthzl.net] >>800 そういった基本的なことはマニュアルに書いてあるよ Operator Precedence(演算子の優先順位)の項目ね まあ普通は優先順位を考えなくても可読性上げるために括弧使うけども 整数型を条件式にするif文は、0かそれ以外かで判定してくれるけれども 個人的には条件式の意味を汲み取り易いように同値比較にするな つまりif文には必ずboolean型が渡されるようにしている dim as integer value if value then ... endif じゃなく if value <> 0 then ... endif ってするわ v1.04以前はboolean型がなかったから前者のような条件式は有りだけど 将来的に仕様変更でboolean型のみになる可能性もあるから後者にしてる
859 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 16:55:44.76 ID:ECXHthzl.net] >>801 補足 今のところ関係演算子や論理演算子はinteger型(0か-1)を返し boolean型の同値比較のみboolean型を返す仕様 まあ、互換性を考えたらこのままの仕様かもね
860 名前:デフォルトの名無しさん [2016/10/09(日) 18:25:53.63 ID:jP/U8Kom.net] Select case 文で、End Select を忘れると、訳の分からないエラーメッセージの羅列が発生する。 Disp06.bas(147) error 35: Expected 'END SELECT', found 'end' in 'end function' Disp06.bas(149) error 60: Illegal inside functions, found 'Function' in 'Function WndProc(ByVal hWin As HWND,ByVal uMsg As UINT
861 名前:,ByVal wParam As WPARAM,ByVal lParam As LPARAM) As Integer' Disp06.bas(270) error 60: Illegal inside functions, found 'Function' in 'Function WinMain(ByVal hInst As HINSTANCE,ByVal hPrevInst As HINSTANCE,ByVal CmdLine As ZString ptr,ByVal CmdShow As Integer) As Integer' Disp06.bas(305) error 41: Variable not declared, WinMain in 'WinMain(hInstance,NULL,CommandLine,SW_SHOWDEFAULT)' Disp06.bas(309) error 35: Expected 'END SELECT' in 'End' [] [ここ壊れてます]
862 名前:デフォルトの名無しさん [2016/10/09(日) 18:54:04.23 ID:jP/U8Kom.net] >>801-802 処理系の違いってけっこうあるんだね。 makoto-watanabe.main.jp/freebasic/OpPrecedence.html の「最も高い優先順位」の表をみると、上から、算術演算子、比較演算子、論理演算子、の順番になっている。細かいことを覚えないで、群で覚えていた。 数値型変数と数値型定数の演算だから、「OR」を算術演算子と解釈したのが混乱の原因だった。 「OR」を論理演算子、As BOOLEAN 型変数同士の演算の場合、と、As ULong 型変数(数値型変数)の演算の場合で区別してくれると、勘違いしていた。 MS-DOS のバージョンの変遷だったか、何かのライブラリーの変遷だったか、覚えていないが 障害発生時の分岐を JC でやるか、JNZ でやるか、の処理で問題になった時がある。 製造元では、OR AX,AX JNZ で処理していてので、問題なかったんだが、ユーザーの方で JC でやっていた(1マシンサイクル早い)人がいたので問題になった。 バージョンアップで NC(キャリーフラグに0が定義されている状態)でも正常終了するようにかわったのが直接の原因。
863 名前:デフォルトの名無しさん mailto:sage [2016/10/09(日) 19:30:32.08 ID:ECXHthzl.net] >数値型変数と数値型定数の演算だから、「OR」を算術演算子と解釈したのが混乱の原因だった。 流石にその解釈は… andやorは左右オペランドが整数型ならビット演算子として動作し boolean型(0か-1の符号付き整数型も)なら論理演算子として動作するのよ C/C++系だと、前者が&や|、後者が&&や||ね 0か-1の符号付き整数型は、内部表現が&h00000000か&hFFFFFFFFだから論理演算可能なのよ If文は「0かそれ以外か」の判断をするから前者も後者も条件式として渡せてしまう でもやっぱり論理演算が条件式となるべきなんだよね boolean型や0か-1のみ表現する符号付き整数型の何方かね
864 名前:デフォルトの名無しさん [2016/10/09(日) 21:35:11.73 ID:jP/U8Kom.net] >>805 >らビット演算子として動作し 型宣言を覚えていないけど、ビット型変数、バイト型変数、ワイド(2バイト)型変数、ダブルワイド(4バイト)型変数があって、 これらの変数に限って、論理演算子(AND, OR, NOT, XOR, XNOR)が使えた。 比較演算子 (.lt., .LE., .EQ., .NE., .GT., .GE.)の結果は、2バイトの領域をもつワイド型変数として、-1,0,+1 のいずれがの値となる。 IF (数値変数) Goto (ラベル1), (ラベル2), (ラベル3) (算術IF文)でJmp (Goto)先が決まった。 という頃の名残。Fotran 6の資産が結構生き残っていた。 論理演算の値は常に正数になるので、負数桁を読み捨てて、0か1になる。 型を無視した処理をやらない限りは負数にならない。 0000かFFFFかという演算ではなくて、00(中略)00か00(中略)01かの1バイトしか見ない。 という頃の話。 >前者が&や|、後者が&&や||ね この演算子は知りません。 C/C++ は持っているけど、自分で描けなかった。 >ビット演算子 これは、論理演算子と同じく AND, OR, NOR, XOR, XNOR があるのだが、 対象がビット型変数、1ワードの最下位1ビットのみを使った変数、に使う演算子で、 2進法の1桁のみの場合。 論理演算子(1ワード16ビット全体)とほぼ同じ名称なんだけど、1文字余計な語(忘却)が付く。 1回も使ったことがない。 「整数型」「8進型」(型を無視するスイッチを指定すれば実数型も使用可能、実数型の指数部を切り離して不定長実数にするという手法もあった)の場合には、論理演算子 「ビット型」の場合には、ビット演算子(2進演算子) C言語と使っていたFotranの方言(Jis 規格外演算)の用語の違いと思います。
865 名前:デフォルトの名無しさん [2016/10/10(月) 00:09:02.18 ID:QrjgKXiS.net] 自分が言いたかったのは ここに書き込むときに表示される内容に 著作権を譲渡する と書いてあるのとトップページ?に書いてある転載する時には許可が必要? みたいな内容からここでなんらかの関数等が作られた時に それが自由に使えなくなってしまうのではないだろうか? という心配からオープンの方が向いているのではないか? と思った という方向性の話だったんです 上のやりとりを見ていてオープン2chを思い出して行ってみたらまだ有ったし パブリックドメインと書いてあったから あっちの方がいいんじゃないかな という事だったのです GFDLについてどうとか出てるけど 利用に関しては自由に使うという精神に反していると私は感じは無いので特段問題無いと思ってる 法的に完全に黒だみたいな話をしたところで 結局は裁定次第だから出ないと解らない 向こうの人達が訴えるほど侵害されていると判断するかしないかが重要 裁定を要求するほど酷いと向こうが感じて訴求してくるかが一番重要だと自分は思っている 私は裁定の内容に関わらず向こうが駄目だと言うならそれに従うべき という感じですね
866 名前:デフォルトの名無しさん mailto:sage [2016/10/10(月) 00:48:42.37 ID:6bVjh2uR.net] GFDLとか、こういう独自ライセンスを作る人は、他のライセンスの使用は、絶対に認めない。 CCなどにライセンスを改変されるのが絶対に嫌だから、わざわざ独自ライセンスを作っている。 他のライセンスへの改変は、最初から認めていない ライセンスの改変など、著作権法違反で、年間千人とかが有罪だろ。 刑事告訴すればいい。 何年間もの、ものすごい他人の努力を盗む連中は、刑務所へ入れるべき そもそも著作権を盗まれるのが嫌だから、独自ライセンスにしているのに、 勝手にライセンスを改変する奴が悪い
867 名前:渡辺真 [2016/10/10(月) 10:24:48.00 ID:Zb+8gsTV.net] GFDL とは 0. PREAMBLE (前文) から抜粋 This License(GFDL) is a kind of "copyleft". GFDL ライセンスは、「著作物を自由に複製・改変できるようにする思想」の一つです。 The purpose of this License(GFDL) is to assure everyone the effective freedom to copy and redistribute it, with or without modifying it. GFDL ライセンスの目的は、対象文書を改変するしないを問わず、誰でも自由に、対象文書をコピーして、再配布できるようにすることです。 Secondarily, this License(GFDL) preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. さらに、GFDL ライセンスは、著作者や出版社が、その著作物に対して名誉・称賛を得る手段を提供します。 また、自分自身が著作した部分以外の、他人が行った改変に対して、責任を負わずに済むようにします。
868 名前:渡辺真 [2016/10/10(月) 10:25:49.78 ID:Zb+8gsTV.net] GFDL は、上記の目的を達成するために、以下の条文を設けています。 ここが「Public Domain(著作権消滅)」と異なる点です。 4. MODIFICATIONS (8. TRANSLATION) 改変/翻訳 ・ E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. 改変/翻訳者は、改変/翻訳に対する適当な著作権表示を、他の著作権表示の近くに追加しなければなりません。
869 名前:デフォルトの名無しさん [2016/10/10(月) 12:51:39.56 ID:kOR6lwYv.net] RadioBottan、オプションボタン関係。 C:\tool\FreeBASIC\inc\win\winuser.bi const BS_RADIOBUTTON = &h00000004 const BS_AUTORADIOBUTTON = &h00000009 'ラジオボタン const DLGC_RADIOBUTTON = &h0040 const DFCS_BUTTONRADIOIMAGE = &h0001 const DFCS_BUTTONRADIOMASK = &h0002 const DFCS_BUTTONRADIO = &h0004 declare function CheckRadioButton(byval hDlg as HWND, byval nIDFirstButton as long, byval nIDLastButton as long, byval nIDCheckButton as long) as WINBOOL declare function IsDlgButtonChecked(byval hDlg as HWND, byval nIDButton as long) as UINT const MFT_RADIOCHECK = &h00000200 declare function CheckMenuRadioItem(byval hmenu as HMENU, byval first as UINT, byval last as UINT, byval check as UINT, byval flags as UINT) as WINBOOL: '表示枠上部メニュー関係 が見つかった範囲。 FbEdit の *.rcファイル編集画面で、特異的内容は、 Auto, Groupの2つ。 前者は、クリックしたときの作画処理みたい。後者(Group)がややこしかった。 (Group) にFalse を指定しておくと、存在するすべてのRadioBottanが一群として処理されてしまう。 排他時に、他の選択マークを消してくれるという便利な機能もあるけれども。 芋づる式仕様対応、混乱と混沌を司る吾輩としては、「ちょっと違ったソフト」を作る必要があるときに、 既存のソフトに追記して作成する。もちろん、既存の内容はそっくり残しておく。 つまり、ちょっとだけ異なるサブルーチンがわんさかある、ソースリストが出来上がる。 一番手間が食うのが、人-機械インターフェース、つまり、手作業の分野なので、手作業対応のルーチンの共用が前提。 RadioBottanが1セットしか使えないというのは、致命的な問題となる。 declare function CheckRadioButton() を見ると、連続したID番号をふって、一連の群(Group)として取り扱うらしい。 というわけで、現在 *.Rc ファイルから、関係情報を読みだして、一覧表を作り、ついでに参照るーちんも作ってくれるルーチンを作成中。
870 名前:デフォルトの名無しさん [2016/10/10(月) 15:04:56.18 ID:kOR6lwYv.net] >>811 つづき MSReturnCode = CheckRadioButton(TakaHWND, IDC_RBN6, IDC_RBN7, IDC_RBN7) で成功した。自動作成ルーチンの方。 枠(IDC_GRP?) に囲まれた座標内に、左上点(lef, Top)が存在するかの判断で、 どの枠に属するか、を規定し、先頭と末尾のID(IDC_RBN6, IDC_RBN7)を決定することになる。 連番でないと、なんかおかしなことが起こりそうなので、連番チェックどうしようかな、というところ。 表示メッセージも決めなければならないし。
871 名前:デフォルトの名無しさん mailto:sage [2016/10/10(月) 22:21:29.35 ID:6bVjh2uR.net] >>809-810 GFDLは、copyleft だろ。 GFDLから派生した著作物も、絶対にGFDLにしなければならない CCなど他のライセンスへの改変は、絶対に出来ない。 元がGFDLのものは、再帰的に継承していっても、必ずGFDLにしなければならない 絶対に、Public Domainにはしない、ライセンスを放棄しないって書いてあるだろ だから、何回も言
872 名前:ってるだろ。 わざわざ独自ライセンスを作る人は、絶対に著作権を放棄しないし、 他のライセンスにも変更できない ましてや有料のCCには変更できない。 著作権に最も厳しい人達だから、これ以上警告を無視して、 ライセンス改変を続けるのなら、刑務所行き 勝手に人の著作物を使うな。 わざわざ独自ライセンスを作っている人の、ライセンスを変えるな。 日本国内と同時に、国外でも刑事告訴されるぞ [] [ここ壊れてます]
873 名前:デフォルトの名無しさん [2016/10/12(水) 22:06:46.06 ID:8gvBjqIy.net] ちょっと大きい *.rc ファイル(5.3KB)、部品数55の処理ルーチンを作っていて まだ、細かいところまで特定していないが、 局所配列 Dim As String PartsNameString1(), PartsNameString2(), PartsNameString3() を参照中にハングするという現象が発生した。 枠("IDC_GRP" GroupBox)番号4、 枠内部品、文字表示("IDC_STC" Static)5, テキスト入力5、コマンドボタン5。 単に、配列の範囲を超えて参照しているためか、領域の食いつぶしがあったのかは、不明。
874 名前:デフォルトの名無しさん [2016/10/12(水) 22:10:04.25 ID:8gvBjqIy.net] >>813 >>792 で書いたけど 怖いのが、民法1条の規定と民法のこうじょりょうぞくの規定。 なぜ怖いかわかるか。 行政法をやっている人間だと、 この規定で、却下される場合が多いので、注意が必要 と学んでいるはず。
875 名前:デフォルトの名無しさん [2016/10/13(木) 21:24:53.66 ID:7rM2EKzx.net] >>814 つづき。 変数を大域に置こうとして、*.RCファイル読み取り関係を別ファフイルに移動。 障害がなくなってしまった。要は領域の食いつぶしであった。 スタック領域が少なくて、自己書き換えを行っている模様。 QB ではスタック領域サイズの動的変更が可能だったはずだが、静的変更しか見つからない。 1つのスタックで全変数を処理しているとなること、Windows の意義がなくなってしまう。 ファイル(モジュール)別にスタックが用意されている模様なので、大きな変数を取り扱う場合には要注意。 makoto-watanabe.main.jp/freebasic/CompilerOptt.html
876 名前:デフォルトの名無しさん [2016/10/13(木) 22:02:03.31 ID:7rM2EKzx.net] >>816 つづき。 8080系では、処理の速さからスタック領域に変数を置く傾向がある。 ところが、スタックによるメモリー破壊を検出する、メモリー保護の例外、という事象が発生しない。 メモリー保護用レジスタがないし、関係命令もない。 スーパーバイザー以外のタスクが使用するメモリーをスーパーバイザーが決定するのが、マルチタスク処理の基本ではあるが、 8080系は、シングルタスク用CPUなので、関係命令がない。 結果として、やたら処理中に原因不明の障害を発生しやすくなる。 makoto-watanabe.main.jp/freebasic/CompilerOptt.html には、スタックの初期値(無指定時の容量)が記載されていない。MA-DOSの処理では、 サブルーチンコールに、全レジスタの3-5倍ぐらい(8086 で16レジスタ位、32バイトの20倍512バイトをシステム割り込み(INT 21他)用に確保するように記載があったと記憶している。 FCだったかな、80480以後の旧隠し命令、全レジスタのPOPをサブルーチンコールとしてユーザーが使用するようになったのは。 非公開レジスタを含めてPOPするので、かなり巨大なスタック領域を確保する必要がある。 (細かいことはken-crate.blue.coocan.jp/asm/asm_menu.htm のようなサイトを探してくれ) 使う変数の目安としては、入力変数+出力変数の合計を作業変数と近似して >>814 だと、 入力ファイル 50KB(内1KBを読み取る), 出力ファイル100KB(内4KBか可変、残りは表題などの定数)、出力変数2kbより、作業変数7KB、合計14KBを用意して ここに、FreeBasic 内ルーチンの参照分(これが不明)を足す。 スタックの消費量の管理については、在庫管理が参考になる。 www2.rku.ac.jp/takada/logist/plan_zaiko.html 在庫が不足すれば、ハングアップという結果が待っているわけで、 目安としては、全容積の50%位を消費するようにして、66%を超えないように管理する。 理論としてはわかっているが、実際のスタックの状況をユーザーレベル(タスク)で検出できないと、対応も取れない。
877 名前:デフォルトの名無しさん mailto:sage [2016/10/13(木) 23:42:39.44 ID:vEZbybAc.net] >>816 、>>817 内容は詳しく知らないけど、スタック領域って関数呼び出しに使用されるよね 関数の引数や関数内のローカル変数が割り当てられて デカイ領域のローカル配列や関数の再帰呼び出しがオーバーフローの原因になる 配列なら動的にヒープ領域確保するか静的領域を使えば良いし 再帰呼び出しもループ処理で代替できる スタックオーバーフローなんて普通のコーディングで起こり
878 名前:得ないと思うけど? それ設計ミスなんじゃないの [] [ここ壊れてます]
879 名前:デフォルトの名無しさん [2016/10/14(金) 00:22:17.64 ID:ZL7xZTNZ.net] >>818 >普通のコーディングで起こり得ないと 普通に使うと頻発する。 というのは、配列の大きさを処理群の最大値で決定している。 まず、入力値(60-100個)を(5-10)群に群分けして、割り振る。 ここで、最大数20の群があると、配列が (10群 , 20個)の領域を確保する。 しかし、前後最低1個は、未使用の領域を確保しておく。Dim AA(10)として、未使用領域 AA(0), AA(10)を用意する。 これは、設計があいまいな日曜プログラマーな場合に、バグが頻発する AA(0), AA(10)の使用を避けることで、バグ取りを回避する。 入れる文字を20文字として、32バイト(位置アドレス2つ、8バイト等を12バイトと想定, QBでは、配列全体に10バイト位、個々の配列構成変数に10バイト位使っていたので同じとした、16→32ビットの変化で2倍になっているかもしれない)。 10 * 20 * 32 = 6.4KB が1配列。 5配列もあれば、32KB使ってしまうので、(QBと同じく64KBスタックを使っていれば)簡単にパンクする。 Dim AA(10,20) AA = Fun1(AA()) Fun1 内に AA = Fun2(AA()) とあれば、配列が2個使っていることになる(QBと同じだとすると、引数をPush する)から。 FreeBasic だと、障害発生ちょっと前までしか出力ファイルに残っていないのだが、 QB だと、引数1個で、100だか300回位の再起呼び出しでハングした。 再起呼び出しの回数を2-3回に制限して、 巨大な配列は、共通領域なり、外部配列なりに保管して、引数によるスタックを圧迫を抑え つかっていた。V.B.だと、このあたりを気にしないで済むので、気軽に巨大配列の引数を使っていた。 そのつもりで使ったらば、おかしなことになってしまった。 >ここで、最大数20の群があると、配列が (10群 , 20個)の領域を確保する。 と書いたけど、V.b.時代だと、偏りも考えられるので、(100, 100)の配列を作って使う。 前に、スタック不足と思られる障害が出ていたので、数を数えてから、配列を作るという作業に直してはある。
880 名前:デフォルトの名無しさん [2016/10/14(金) 00:23:16.25 ID:ZL7xZTNZ.net] >>819 のつづき。 ただ、定数、 IF (AAstring = "寿限無寿限無 なんたらこうたら ") Then という使い方があった場合に、QBでは、*.OBJファイル別にこの手の文字が並んでいた。 これが、スタック領域に作られる(*.EXEが圧縮状態でスタック領域に解凍する)としたら、結構大きな領域になってしまう。 それと気になったのが Print #FileNoiLong, "なんたら" (以後同様に100-200行ぐらい、合計80-90KB) で出力した内容が途切れるという現象。 ファイル出力内容をスタックに貯めておいて、ある一定量になるまで保管して、まとめて出力する という処理が行われテいる。 ファイル出力時に出力済みスタックの内容が破棄されて、スタックの移動が行われていれば問題はないのだが 使用済み領域であるマークだけして、スタックをのそのまま残している場合には、 ファイル出力そのものがスタックを食いつぶすことになる。
881 名前:デフォルトの名無しさん mailto:sage [2016/10/14(金) 00:53:09.58 ID:B5drn/wa.net] >>819 んー? 関数の引数の配列って絶えず参照渡しだから 配列全てがスタックに乗らないと思うんだけど? >入れる文字列を20文字として これの型は?string型? もしそうなら、string型はポインタ、文字列の長さ、キャパシティの各4バイトの合計12バイトの 記述子分しか保持していおらず、文字列自体はヒープ領域(allocateして)に確保している だからスタックに乗るのは記述子分だと思うんだけど どうも見えてこないな 思うに1つの関数内でアレコレやりすぎなんじゃないの?
882 名前:デフォルトの名無しさん mailto:sage [2016/10/14(金) 01:36:56.54 ID:B5drn/wa.net] 今試しに、integer型の配列10万個を
883 名前:関数に渡して 関数内部でinteger型のローカル配列10万個にコピーして その合計を返す関数を書いたけど、オーバーフローにならなかったよ 流石に100万個の場合は警告出たけど どのような最適化が行われているか分からんけど GAS、GCCバックエンド共に問題なかった [] [ここ壊れてます]
884 名前:デフォルトの名無しさん [2016/10/14(金) 20:52:52.30 ID:c0NY+ezm.net] >>821-822 こんなところ。 'MessageBox(TakaHWND, "Hello (rcPatsTypeReadSub07) " + Str(IAA), "Messagebox caption", MB_ICONINFORMATION) IAA = rcPatsTypeReadSub07(FileNoLong2, PartsNameSU, PartsTypeString(), PartsTypeNoLong(), GRPnoSULong, GRPNo(), GRPnoPartsSU(), PartsNameString(), PartsNoListLong()) Function rcPatsTypeReadSub07(FileNoLong2 As Long, PartsNameSU As Long, PartsTypeString() as String, PartsTypeNoLong() As Long, GRPnoSULong AS Long, GRPNo() As Long, GRPnoPartsSU() as Long, PartsNameString() as String, PartsNoListLong() as Long) As Long '(2016.10.12 発見) ここのどこかでハングする Dim As Long IAA, IBB, ICC, IDD, GRPnoLong Dim As String Astring, PartsNameString0 Dim As Long TopPartsSU, BotPartsSU, Line1SU, Line2SU, Line3SU, LineTsu1, LineTsu2 Dim As String PartsNameString1(), PartsNameString2(), PartsNameString3() rcPatsTypeReadSub07 = 0 Print #FileNoLong2, "" Print #FileNoLong2, "Function DispGRPinsideMove02(IDnoLongGRA As Long, ActionType As Integer, SpaceType As Integer, WidthPoint As Long, HeightPoint As Long, FullWidth As Long, FullHeight As Long) As Long" (中略) MessageBox(TakaHWND, "Hello (rcPatsTypeReadSub07 - 6) "+Str$(GRPnoLong)+"-"+Str$(LineTsu1), "Messagebox caption", MB_ICONINFORMATION)
885 名前:デフォルトの名無しさん [2016/10/14(金) 20:54:01.32 ID:c0NY+ezm.net] >>823 のつづき。MessageBox()に挟まれた間の内容 ' ここでハング GRPnoLong = 4: LineTsu1 = 14 Print #FileNoLong2, " PartWidth = (FullWidth \ 3) - WidthSpace: IF (PartWidth <= 0) then PartWidth = 0" Print #FileNoLong2, " PartWidth1 = PartWidth: PartWidth2 = PartWidth: PartWidth3 = PartWidth" Print #FileNoLong2, " WidthPoint1 = WidthPoint + WidthSpace" Print #FileNoLong2, " WidthPoint2 = WidthPoint1 + WidthSpace + PartWidth1" Print #FileNoLong2, " WidthPoint3 = WidthPoint2 + WidthSpace + PartWidth2" MessageBox(TakaHWND, "Hello (rcPatsTypeReadSub07 - 7) "+Str$(GRPnoLong)+"-"+Str$(LineTsu1), "Messagebox caption", MB_ICONINFORMATION) てなところ。プリント命令の途中でハングしている。
886 名前:デフォルトの名無しさん [2016/10/14(金) 20:56:20.03 ID:c0NY+ezm.net] 現在は、参照側 >>823 の Function rcPatsTypeReadSub07(FileNoLong2 As Long, PartsNameSU As Long, PartsTypeString() as String, PartsTypeNoLong() As Long, (後略) の PartsTypeNoLong() の内容がすべて 0 になるという現象が発生している。
887 名前:sage [2016/10/14(金) 21:34:14.16 ID:COkETlXd.net] https://www.youtube.com/watch?v=NJYs5GTmdcg https://www.youtube.com/watch?v=tY-xyCbzdqY
888 名前:デフォルトの名無しさん [2016/10/14(金) 22:31:50.42 ID:c0NY+ezm.net] >>819 の内容がわからなかったのかな。 別ファイル(モジュール)だから、主ルーチンは存在しない。存在するのはすべてサブルーチンであるから、 Function 適当なルーチン(ActionType As Long)で、ルーチンが定義される。 「適当なルーチン」内で使用する配列 大きさ = 100 Dim 配列1() as long, 配列2() as String ReDim 配列1(大きさ, 大きさ) as long, 配列2(大きさ, 大きさ) as String 2次元配列を用意しすると、新規に取得したMCB(メモリーコントロールブロック)に作られる場合とスタックに作られる場合があるが 一律 MCB として 1.配列1の所在・大きさを示すアドレス等が変数管理領域に新規登録されて 2.MCBで領域を確保、大きさ, 大きさ、の2次元配列を(数値だから)確保して使用する。 ところが、文字列の場合だと、 2.MCBに領域を確保、大きさ、大きさの2次元配列で、文字の保管場所のアドレスを保管する領域を確保する。 3.文字の保管領域(多くの場合にはスタック)にヌル文字であることを示す内容を保管する。 これは、処理系で異なり、単に文字列+&h0000(又は&h00、前者は2バイト文字対応の場合、後者が1バイト文字の場合)が存在する固定アドレスを保存する場合と、追加して文字長さを保管する場合、あるいは、文字長さのみを保管する場合がある。 MCBに保管しない場合で、全部スタックに保管する場合がある。 Redim 宣言時にヌル文字をスタックに書き出して、新規に文字変数が定義されたときには、スタックに新規に文字を入れて、古い文字を消さないで残している場合には、スタックが急激に消費される。 For IIA = 1 to 10 Astring = Astring + "1" Next IIA Astring = "" の場合には、スタック内文字が消されている場合が多いが For IIA = 1 to 10 Astring = Astring + "1" Bstring = Bstring + "1" Next IIA Astring = "" の場合には、スタックが全部残っている可能性がある。 ヌル文字で始まったとしても、2文字+&h00の4文字だから、4+5
889 名前:+...+14 =??? 、???* 2 =???スタックを食いつぶすことになる。 [] [ここ壊れてます]
890 名前:デフォルトの名無しさん [2016/10/14(金) 23:12:53.82 ID:c0NY+ezm.net] 逆汗したときに ------------------------- (システム予約)|__(Pgソース)__|___(変数領域)___|___(スタック領域)___|(システム予約) とメモリーが使われていた。文字の最大文字数が255で文字長さ1の合計256が最大値で 配列を作ると、スタック領域を移動して、スタック領域の後ろに文字領域を確保していた。 ここがいっぱいになってくると、突然GAP(ガーベージコレクション) https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%99%E3%83%BC%E3%82%B8%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3 を始めだす。 処理速度が急激に遅くなる場合と、高速な場合とがあり、処理速度が一定していない場合には、ガーベージコレクションを行っていると考えられる。 常に高速な場合には、カーページコレクションをしていないので、スタックあふれや、メモリーリーク https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%AF の可能性が出てくる。 このあたりの処理は、ユーザーに開放されていない場合が多いので 怪しいなと思ったらば、メモリーダンプ、再起動して継続処理をするようなユーザーソフトを組む必要が出てくる。 Free-Basic でGAP命令があるのかな?。使う命令しか見ていないので、わからない。
891 名前:デフォルトの名無しさん mailto:sage [2016/10/15(土) 00:59:26.30 ID:+WAwTfPB.net] コードを載せてもらっておいて何だけど、何をしている関数なの?全く見えてこない 言っちゃ悪いが、その引数の多さ、関数内での変数宣言の多さから見て 処理の汎化→関数化が成されていないコードにしか見えんよ 何で構造体使わんの?何でもっと他者が読みやすいコード書かないの? 読み難いコード≒難しことをするコードじゃないからさ それとFreeBASIC標準の動的配列(redim)は string型と同じように記述子を持って内部でAllocateして配列の要素を別に持つのよ でも記述子のサイズが次元が増えると結構な大きさになる その要素数に関わらず、1次元配列で32バイト、2次元配列で44バイトを消費する 例え、redim array(0,0)でも44バイト消費する 前のiniファイルの処理コードを観た時も思ったけど 無駄な処理を入れ過ぎな上に複雑に考え過ぎだわ FreeBASICでなく、古いBASICでも、もっとスマートに書けるよ 大口叩いて申し訳ないが、今時のコードを勉強するべきだわ
892 名前:デフォルトの名無しさん [2016/10/15(土) 09:46:17.60 ID:WbjwIM/1.net] >>829 わかるところだけ >何で構造体使わんの? → バグ取りが終わっていない。構造体の使用はまとめに入ってから。下手に構造体を使うとバクの巣窟、無駄な領域の使用になるから。 構造体については、JIS で定義していないので、配列名の統一で対応することになる。 >関数内での変数宣言の多さ Fotran やっている人ならば、10個ぐらい引数を使う処理は普通にやっていると思う。 >他者が読みやすいコード書かないの? → 単純な処理の繰り返しにしているでしょう。 >観た時も思ったけど無駄な処理を入れ過ぎな → 参照の前後で値が変わるという現象が見られたから、参照の前後で値が一致しているかを見るルーチンを追加している。これを残しておかないと、メモリー関係の障害の対応が取れなくなる。 ここに書き込んだ2件の障害は、メモリー関係だから、障害の特定ルーチンも関係してくる。 処理内容の複雑怪奇さは、V.B.の事象処理ルーチンの多さ Private Sub Form_Resize() Private Sub Label1_Click() RedCtr1(0).Caption = "RdRegNs" RedCtr1(0).ToolTipText = "Html ブラウザ関係情報" RedCtr1(0).Visible = True RedCtr1(0).Enabled = ABool 等を1つのルーチン(Function WndProc()) に押し込まなければならないわけで 移植対象となるルーチン(*.frm 数として500位)の多さから汎用性を優先することとなる。 まだ、単純作業でうんざ
893 名前:閧オたルーチンの書き換えルーチンしか描いてないから単純だけど、もう少し複雑/乱雑になる予定。 >もっとスマートに書けるよ → 「スマート」の意味が分からない。 https://kotobank.jp/word/%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88-84913#E3.83.87.E3.82.B8.E3.82.BF.E3.83.AB.E5.A4.A7.E8.BE.9E.E6.B3.89 外観を優先した形態のことかな?。 移植性を優先している(単純な*.frmの移植以外にも複雑な*.frmの移植が控えている)。 [] [ここ壊れてます]
894 名前:デフォルトの名無しさん [2016/10/15(土) 09:47:26.55 ID:WbjwIM/1.net] >>830 つづき >今時のコードを勉強するべきだわ → JIS-Basic の範囲になるべく収まるように描いている。 下手に変えると移植性が悪くなる(自分で発見できないバクが多発)ので、変える気はない。 例外処理を大量に入れているから、移植時の拡張(Asw = {0,1}で定義 → {0,1,2}で定義等)や ここには記載してない処理の対応とか、ある。
895 名前:デフォルトの名無しさん [2016/10/15(土) 10:05:02.19 ID:WbjwIM/1.net] >>829 何をしている関数なの?全く見えてこない >>830 にちょこっと書いたけど、*.rc ファイルの内容を読み取って、 "#define " の内容を PartsNameString()とPartsID(), {1,...,PartsNameSU}/PartsNameTSU に保存 "BEGIN" から "END"の内容を PartsTypeString(), PartsTypeNoLong(), PartsNameErrFigLong(), MSPartsTypeString(), PartsStyleString(), PartsPointLong() {}/PartsNameTSU に保存 特異な動作をする "IDC_GRP", "IDC_RBN" の内容を分類整理。 前者が、PartsGroupFigLong(), PartsGroupNoLong(), PartsNoListLong() 後者が、RadioMaxID(), RadioMinID(), RadioListID(), RadioMaxPartsNameString(), RadioMinPartsNameString() 以上の内容をもとに、Function WndProc() に押し込む処理のうち Sub Form_Resize() 処理に相当する内容のうち 簡単な部分(単純作業して別の*.frmからコピーして作成したルーチン部分)を切り出して、ソースファイルを作る処理。 今回ハングしたのが、「ソースファイルを作る処理」中。
896 名前:デフォルトの名無しさん [2016/10/15(土) 10:23:21.65 ID:WbjwIM/1.net] 無駄なルーチンと一見思える処理の一つとして、正関数(?)と逆関数がある 関数とその逆関数を用意して、正関数を求めた時に同時に逆関数も求めるようにする。 両者に違いがあった時にいずれかの関数の間違いがあることがわかる。 処理が多少遅くなるかもしれないが、関数の間違いが簡単に見つかる。 定義域・値域の範囲はあらかじめしらべて、はねておく。 まだエラー処理ルーチンを作っていないので、入り口だけ用意してある。 "Case Elese"だけ用意してあるのが、この処理。 エラー処理ルーチンの名称が *.frm によって異なるので、汎用性を確保するうえでこれ以上はできない。
897 名前:デフォルトの名無しさん [2016/10/15(土) 10:43:17.27 ID:WbjwIM/1.net] 無駄なルーチンと一見思える処理の一つとして、ループバック処理がある。 これは、参照値をそのまま返す処理を呼んでいるが、正規の名称があるかもしれない。 食いつぶし処理 (A$ = Left$(OA$,1): OA$ = Mid$(OA$, 2) 等)をしている場合には当然だけど 普通の処理でも行っている。先頭がOで始まる変数の場合がこれ。 変数の食いつぶしがあったり、変数の誤書き換えが発生するような分量(30行超過を目安にしている)の時とか、 に用意している。 ルーチンの最後で一致しているかをみれば、食いつぶし処理の発見が容易となる。 障害が発生しやすい場合、過去に変数の食いつぶしが発生した場合には、食いつぶしの検出として保存して置き、エラーメッセージ表示のための変数として使用する。 Fotranで外部配列(HDD内の特定名のファイル)に保存していたら、無駄な処理・何をしているのかわからない処理・狂気な処理・混沌な処理として悪名高かった。 バグの発見がかなり容易になるので、便利。メモリーダンプともいう人がいる。
898 名前:デフォルトの名無しさん [2016/10/15(土) 11:52:35.53 ID:WbjwIM/1.net] >>829 >その要素数に関わらず、1次元配列で32バイト、2次元配列で44バイトを消費する ちょっと多いかな、と思ったんだけど ken-crate.blue.coocan.jp/asm/486r.htm セグメンドレジスタが16ビット、2バイト。 イン
899 名前:fックスレジスタが32ビット、4バイト。 浮動小数点レジスタが80ビット、10バイト。 合計、16バイト。Push-Pop命令が、32ビット単位だった気がする。合計14バイト。 数値と文字の配列を区別しないで、文字の配列のアドレスに数値レジスタを保管する、に統一するならば、倍の28バイト使うので 32バイトは普通じゃないのか?。 2次場合には、1次元配列になおして(乗算ルーチンがあるので処理が遅くなる)保存するFotran 方式ではなく、2次元として保管しているのであれば、6バイト増加するのは不思議ではない。 [] [ここ壊れてます]
900 名前:デフォルトの名無しさん mailto:sage [2016/10/15(土) 16:14:26.53 ID:+WAwTfPB.net] >>830 移植性に対する見解の違いだな 君はコードをコピペして他言語に持っていった際に修正箇所が少ない事を指しているな 自分は汎化された小さな部品の役割が簡潔明瞭であり その機能を1つのみ保有する部品の集合体であれば移植性が高いって考えている 手続き型言語なら関数がその部品ね、つまり言語の形態なんて関係ないのよ 例えば、ある機械があったとして、その機械の部品であるボルトとナットがあったとしようか どんな形態だろうが材質だろうが、役割は「他の部品を留める」って明確だから 前にも言ったけど、FreeBASICはQBASICと互換性があるBASICの形態をしたC言語だから JIS-BASICの規格に沿わせるのはFreeBASIC言語機能の大部分を使わないってことと同義だよ スマートに書けるって言ったのもその部分 他者が読みやすいコード書かないの?って言ったのもその部分
901 名前:デフォルトの名無しさん mailto:sage [2016/10/15(土) 16:30:08.92 ID:+WAwTfPB.net] >>835 いやあ、動的配列の記述子内容を調べたもの 1次元配列なら ポインタ、最初の要素ポインタ、バイト単位の配列サイズ、型のサイズ、次元数 要素数、下限インデックス、上限インデックス ってなっている 次元が増える毎に要素数、下限インデックス、上限インデックス分の記述子領域が増える 32ビットでコンパイルしたら、それらは全て4バイトだから 1次元配列で32バイト、2次元配列で44バイト、3次元配列で56バイト、以後12バイトずつ増加 64ビットでコンパイルしたら、ポインタが8バイト、各サイズがinteger型なら8バイトになって倍増するね だから関数内で動的配列を宣言したら、配列の内容関係なしにそれらのバイト数がスタック領域に乗るね ここではレジスタとか関係なくね?
902 名前:デフォルトの名無しさん mailto:sage [2016/10/15(土) 16:43:47.31 ID:+WAwTfPB.net] >>834 言いたいことは分かるけど メモリダンプって想定したエラーがでた際のメモリ状態を吐けば良い話で 絶えずモニタリングする必要無いんじゃないの? デバッグ作業なんてデバッガ使えば良いし 使わなくとも処々で変数確認用にprint挟めば良い話だと思うけど? >処理の汎化→関数化が成されていないコードにしか見えんよ って言ったのも、あのコードならバグを大量に含むと思ったし それを見つけ出すのも面倒臭いだろうなって思ったから
903 名前:デフォルトの名無しさん [2016/10/15(土) 21:28:10.42 ID:WbjwIM/1.net] >>836 >に修正箇所が少ない事を指しているな ご指摘の通りです。 >大部分を使わないってことと同義だよ それで良いんじゃないの。 言語なんてものは、膨大な資産の継続の上に成り立っている。 C言語の資産はほとんど持っていない(雑誌別冊、C言語入門等の手入力部分位)から。 Basic の資産は、ライブラリーだけて、3-4MB。小さいソフトを除外して、ソースが1MBを超えるソフトは3本。 資源の関係で廃棄しなければならないソフト(例、ドットマトリックスプリンターの重ね書きで描くイラスト)や市販されなくなった市販ソフトの入出力ファイルの作成とか、は廃棄する予定。 DVD2-3枚に入っているはずだけど、自分で管理できなくなりつつある。 かなり捨てると思う。 >>837 >ここではレジスタとか関係なくね? 名称がさっぱりわからないけど、以前逆汗したBasic処理系の使っていたレジスタを80486に置き換えた。
904 名前:使われている変数の名称を知らないから、れじ゜すたで説明した。 >>838 >のメモリ状態を吐けば良い話で その前を追っかけておかないと、ルーチンのどの部分が゜実行中かわからなくなる。 >デバッガ使えば良いし デバッカーの操作が覚えきれなくて、使うのをあきらめた。Gebug.exe(debug.com)で、逆汗しか使わなかった。 操作を間違えて、ディスクをいくつか壊していらい、やめた。 >あのコードならバグを大量に含むと思ったし こちらは問題なし。 親コードの方で正常実行することを確認して、親コードの変更部分を変数に書き換えただけだから。 ただ、動作試験用親コードと書き換え予定のファイルとは異なるから、こっちの方は調べていない。 こっちのバクの発見は、手間がかかるだろう。 [] [ここ壊れてます]
905 名前:デフォルトの名無しさん mailto:sage [2016/10/15(土) 21:41:46.73 ID:+WAwTfPB.net] >>839 >言語なんてものは、膨大な資産の継続の上に成り立っている。 >C言語の資産はほとんど持っていない(雑誌別冊、C言語入門等の手入力部分位)から。 ああ、やっぱりこういう考えを持っているんだな 言語毎の資産なんて関係ないよ C言語で書かれた古いコードであっても、それは他の言語の資産でもあるよ 自分はよくC/C++で書かれたコードを元にFreeBASICで書いている そのコードが表す処理の移植であって、コードの移植じゃない
906 名前:デフォルトの名無しさん mailto:sage [2016/10/15(土) 21:51:04.09 ID:+WAwTfPB.net] >>839 少なくとも、自分より君の方のが知識が豊富だし、経験も上だと思う でも、失礼な言い方で申し訳ないが、レガシープログラマなんだよ 君の知識や経験が、古い思想や古い概念の接着剤でガチガチに固められちゃっている 失礼ながら、それを溶かして欲しいって思ったのよ レガシープログラマを害悪として見る傾向がある そういった人達の資産価値ってあると思ってんだよね でも上記の通りだから全く生かされない 新しい言語(この場合FreeBASICね)を習得する気概があるなら 現在主流となっている思想や概念を取り入れるべきだと思ったのよ 正直な話、Staticおじさんみたいにはなってほしくないね
907 名前:デフォルトの名無しさん [2016/10/15(土) 23:02:42.20 ID:WbjwIM/1.net] >>840 >そのコードが表す処理の移植であって、コードの移植じゃない 処理系の癖が覚えたころによくやる。V.B.へのコピーは5年ぐらいたってから始めた。 まだ全部コピーしていないので、Fotranのソフトがかなり残っている。 同僚か誰かが動作試験して、それを信じて、コピーしたものがほとんど。 処理系が手元にないので、動かすことはないと思う。 自分で手計算してみて、理解できない、と思った部分には手を出さない。 手計算の表がないと、バグが見つけられないから。 >>841 >思想や概念を取り入れるべきだ そりゃ当然だ。 流行の最先端を追いかけ続けたけど、用語の違いを排除すると、大体同じような処理になる。 ポインター、という言葉が使われるけど、相当する語は、アドレスで 構造体が、同じく、ブロック。ただし、形動として使うと全く別の意味になる。 インデックスが、順番号か、特定のレジスタ(インデックスレジスタ)。 処理系で意味が変わってくるので、処理系ごとに違いを覚えなければならない。 ある程度のソフトが描けるようにならないと、このあたりは手を出せない。 というのは、10年ぐらいで消えてしまう場合が多い。 単に覚えるだけならば3か月もあれば十分だけど、自由に描けるようになるには2-3年かかる。 ちょっとしたソフトを作るのに1年ぐらい、機械の償却を6年として、3年ぐらいだから、3つぐらいソフトを描けるだろう。 ここで、機械が変わって、覚えなおすのに3年ぐらい、そして自由に描けるようになる。 3年間遊べるかというと、遊べないから、覚えなおす時間がなく、古い手法を使ったまま結果を出す(ソフトを描く)必要が出てくる。 これが、ソフトウェア業界で、簡単な対応方法として、高齢者の首を切る。首を切る理由として、処理系の新しい概念の導入が使われている。 「新しい概念の導入」が、情報処理関係では、導入できない人の解雇の利用にな
908 名前:チている。 機械が入れ替わるたびに、今までやっていた人が集団で解雇されてゆく。 解雇できるような大手企業だと良いんだが、中小零細だと、解雇したら人間がいなくなる。 30までに覚えられなければ、以後使えない。内容はわかるけど、描けなくなってしまう。 [] [ここ壊れてます]
909 名前:デフォルトの名無しさん mailto:sage [2016/10/16(日) 11:38:39.67 ID:RSdG5rFg.net] >>842 >ポインター、という言葉が使われるけど、相当する語は、アドレスで 厳密には違う ポインタはアドレスを格納してメモリ上の位置を指し示すもの 言語毎の思想や概念だけの話をしているのではなく、コーディングの話をしている レガシープログラマはとかく古い習慣から抜け出せない 例えば、1つの関数に複数の機能を持たせたりする その関数だけで数百行あったり、やたらと分岐が多かったり、無駄な処理を織り込んだりする 以前に書いた変数宣言と初期化の話も同じ それらを論理的に指摘しても、自分の時代はこうだったから、それで良いのだって頑なになる 言語に関係なく、長い歴史の中でノウハウの取捨選択がされてきた それらはデバッグし易く、移植性が高く、フローが追い易く、再利用され易く 改善されてきたノウハウなのであって、流行ではない レガシープログラマが何故害悪なのか、今一度知ってほしいわ 君はStaticおじさんと非常に近い位置にいる Staticおじさんをググる事をオススメするわ
910 名前:デフォルトの名無しさん [2016/10/16(日) 17:02:50.70 ID:9xwX5cNS.net] >>843 >アドレスを格納してメモリ上の位置を指し示すもの 「格納」の意味が分からない。「メモリ上の位置を指し示すもの」はアドレスだから。 >1つの関数に複数の機能を持たせたりする 拡張?、「関数」だからサブルーチンではないよね?。 For-Next 等で配列を使う場合に、配列へのアクセスに時間がかかるので、一つの入力配列から求める値が複数ある場合に、一つにまとめる。 ただし、大容量の2-3次キャッシュを持っているCPUなら、 配列が2次または3次キャッシュに入る程度の大きさの場合 かつ For-Next が1次キャッシュ又は2次キャッシュに収まる大きさの場合 には、For-Next を分ける。 1980年代の頭の良いコンパイラなら、どっちにするかを判断してやってくれるので、ユーザーが考えることではない。 >その関数だけで数百行あったり、 関数を作成するような場合には、100-1000行行く。ライブラリーを見つけてほしいのだが、ニュートン法や最小二乗法を使うとそのくらい必要になる。 >やたらと分岐が多かったり、 「やたら」の意味がよくわからないのだが、 文字を数字のように取り扱う場合には、直接コートに書いた方が簡単なんだが 文字配列を作って配列との一致を検出する という手法を使う場合がある。外部記憶装置を使って、読みだして、、、という処理にする。 >それらを論理的に指摘しても、 論理に欠落がある場合が多い。 わたしの周辺の人物に限られる範囲では、一面的な見方しかできない人が良く使う言葉が「論理的」という言葉。
911 名前:デフォルトの名無しさん [2016/10/16(日) 17:04:29.55 ID:9xwX5cNS.net] Staticおじさん は。>>841 で指摘を受けたので検索させてもらった。辞書には記載がない。 dic.search.yahoo.co.jp/search?p=Static%E3%81%8A%E3%81%98%E3%81%95%E3%82%93&ei=UTF-8&fr=top_ga1_sa 日経の記事より >「static」というのは、Javaのstaticメソッド のことです。 Java が普及し始めるころに、このことを指摘していた。ただ 「static」を使えば、簡単に使えますよ というJAVA の普及に使われていた。 素人がチョコチョコと作るソフトでは「static」で十分だということでJAVAを普及させるために使われた。 日曜プログラマー(情報処理に関する専門的教育を受けていない人)の場合には、「Staticおじさん」で十分じゃないの。 >自分の時代はこうだったから、それで良いのだって https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E >対して、日本では、長時間労働、下流工程での賃金の頭打
912 名前:ちなどにより35歳定年説がささやかれている。 と、「おじさん」だったらば、定年だから、「Staticおじさん」で十分し゛ゃないの。 生産現場にいないのだから。 Free-Basic で 何かのソフトを開発し販売しよう なんて人はいないでしょう。 販売の場合には、商家が良品であることを検査して販売する義務が発生する(商法参照)。 良品を供給する義務がある方々ならば、ご指摘の通りなんだけど 「良品」であることを要求するから、商店からこのような方々は購入するはずです。 [] [ここ壊れてます]
913 名前:デフォルトの名無しさん mailto:sage [2016/10/16(日) 18:22:08.41 ID:RSdG5rFg.net] >>844 アドレスはメモリ上の位置を表すもの ポインタはメモリ上の「ある位置」を「指し示す」もの アドレスを住所に置き換えたとしたら、ポインタはある地点の住所を書き留めたメモ >関数の機能 それぞれの言葉を額面通り、しかも分割して反論を返さないでくれる? 関数には1つの機能だけを盛り込めば良く、それをやらないから数百行にもなる無駄に長い関数を書き やたらと分岐の多い物が出来上がるって話なの 処理内容は簡単なのに、保守性の低い、クソ読み難いコードを生産するって話 例えば 1)テキストファイルをオープンしてその中から特定の文字の個数をカウントするコードを書いた場合 それらを1つの関数に収めちゃうのがレガシープログラマなのよ その関数には、ファイルをオープンするって機能と特定の文字の個数をカウントする機能の2つが入っている 2)文字列型から個数をカウントするコードを書く必要がある出てきたら レガシープログラマは、上記の「文字列カウント」の部分コードをコピペして新しい関数を作る 他の1)や2)以外の対象をした要件があった場合、そのコピペが繰り返される もし、その「文字列カウント」のアルゴリズムにバグが有ったら コピペされたコードを全て修正しなきゃいけない それなら、ファイルをオープンして文字列型のバッファに文字列を格納する関数と そのバッファから特定の文字をカウントする関数の2つを作るでしょ? そうしたら、2)の要件も2つ目の関数で解決するでしょ バグが有ったとしても、修正する箇所は1つで済む
914 名前:デフォルトの名無しさん mailto:sage [2016/10/16(日) 18:29:31.08 ID:RSdG5rFg.net] >>845 もう少しStaticおじさんのことを調べてStaticおじさんって言葉の本質を知りなさいよ 理解した上で機能制限をしたコードを書くのと理解しないで書くのとでは全く違う 君が個人で書いているなら何も文句はないし、好きにすれば良いよ でも、コミュニティでそれをアウトプットするようなら話は変わってくる Staticおじさんという言葉がプログラマ界隈で話題になったのも そういった害悪なアウトプットをするからなのよ
915 名前:デフォルトの名無しさん mailto:sage [2016/10/16(日) 18:46:10.81 ID:RSdG5rFg.net] で、話は>>841 に戻る せっかく君が持っている多くの「純粋な」知識や経験が全く生かされない それは君自身の損失でもあるし、コミュニティの損失でもある だから、そういった古い習慣(思想や概念)を取り払って欲しいのよ
916 名前:デフォルトの名無しさん [2016/10/16(日) 22:50:24.82 ID:9xwX5cNS.net] >>846 >そのコピペが繰り返される 日経バソだったかな、日経はあまりにもバカ臭い内容だったので、1回代金を払った後はとっていない。 この手法を、最新の話題・技術として記載されていた。 日経パソは経営者向けの内容なので、管理職クラスの人がよく読み、まねをする。 そのうち現場が破綻する。破たんしたら、銀行が吸収合併の手続きを取る。 芋づるルーチンと呼んでいる手法で、サブルーチンコールを避けることで高速動作を確保する手法。 ご指摘の通り、保守に手間がかかるから、1回使ったら捨てる(結果に問題があっても手作業で修復する)、ソフトに多用される手法。 >文字列型のバッファに文字列を格納する関数と これは、かなりメモリーを食う手法なので、重複起動しないタスクにしか使えない。 ファイルアクセスに時間がかかるので、 そのファイル関係の処理を全部まとめて、結果のみを保存する ようにしないと、処理が早くならない。 複数機能を入れて結果をまとめて
917 名前:蜍L憶だけを使うように設計する。 >修正する箇所は1つで済む 逆もある。 一つのルーチンにまとめた場合「障害があるから、と直してしまう」と、どこかのルーチンの方で障害が出ることがある。 参照側で、変更ができるかどうか、いちいち検査する必要がある。 解析解が存在する場合だったらばともかく 鞍部問題や解の巣問題の場合には、発言力の強い人が勝手に変更してしまって、 その結果が他に影響が出る(バグの巣窟となる)という多々見られる。 かといって総当たり(等高線ともいう)をやったらば、遅くて仕方ないでしょう。 一つにまとめるか、分割するかは、解析解が存在するか否か、が目安 https://ja.wikipedia.org/wiki/%E8%A7%A3%E6%9E%90%E7%9A%84 >解析解: 問題が「解析的に解ける」とはその解が既知の函数や定数などを用いて閉じた形の式に表せることを言う[1]。対義語は数値解 [] [ここ壊れてます]
918 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 07:54:12.54 ID:ioKnq3J9.net] >>849 >これは、かなりメモリーを食う手法なので、重複起動しないタスクにしか使えない。 答えはNOだよ ファイルから文字列を文字列型のバッファに読み込む そのバッファを文字列カウントアルゴリズムに通す その結果を出力する この動作に使用されるメモリは、1つの関数内でやろうが関数を分けようが変わらない なぜなら、何方にしてもバッファは必要であり バッファを参照(あるいはポインタ)としてカウント関数に渡せば良いから >一つのルーチンにまとめた場合「障害があるから、と直してしまう」と、 >どこかのルーチンの方で障害が出ることがある。 これも答えはNOだよ バグを修正したからといって、その関数の使用先の修正の必要性はない なぜなら、その関数の設計段階で期待される結果が決められているから オブジェクト指向言語が主流になって設計の重要性が叫ばれているけれど それに限った話ではなく、手続き型言語であっても同じこと 何を関数として汎化して切り出すか、それを設計段階で疎かにするから 無駄な読み難いコードが出来上がる Staticおじさんの一連の騒動ををしっかりと調べた? 派生した話ではなく、その話題の発端となった話のことね 言っていることがまんまその人と同じなんだけど、危機感を持つべき事案だよ
919 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 08:11:13.23 ID:ioKnq3J9.net] >>849 オブジェクト指向の話で申し訳ないが、このスライドを見てよ 少し極端な話ではあるけど、参考になると思うよ ttp://www.slideshare.net/MoriharuOhzu/ss-14083300 この内容を額面通り受け取らず、手続き型言語において、この思考をどう活かせるか 慣れ親しんだ思考を取り敢えず横に置いておいて思考を巡らして下さいよ 理解を「出来る、出来ない」に関してアレコレ言うつもりはないけれど 理解を「しようとする、しない」の姿勢に対しては言わせてもらうわ レガシープログラマは、新しい「もの」に対して拒絶的なのよ そのくせ、新しい「物」を使いたがる だけど、古いままの使い方を無理やりする
920 名前:デフォルトの名無しさん [2016/10/17(月) 18:44:10.12 ID:f7KVzbkf.net] >>850 ちょっとこれから出るので、簡単にこたえられる事だけ。 >バッファは必要でありバッファを参照(あるいはポインタ)として より、これはメモリーのバカ食いの手法。 市販機器にのせてある主記憶装置に十分な余裕があるときに限ってできる手法。 入力ファイルは処理が終了するまで変化しては困るので、占有する/コピーして使用する。 コピー先を外部記憶装置にするか、主記憶装置にするか、で、>>850 では、主記憶装置を選んでいる。 >設計段階で期待される結果が決められている 仕様書のあいまいさがユーザー側では多い。 また、古いソフトの転用があるときには、一部仕様の変更が発生して、両者に対応する必要性が出てくる。 色々なルーチンをデータベースに入れて、転用するという考え方もあるが、成功した例を近所では聞いていない。 直接ソフト業界に関係していないせいかもしれない。 >発端となった話 は見つからなかった。
921 名前:デフォルトの名無しさん [2016/10/17(月) 18:47:10.02 ID:f7KVzbkf.net] ハングするソフトの作成に成功した。 AS03 → AS02, AS01 の3つのファイルを作成して AS01 に限って IAA = AS02_AAAA(TakaHWND , InValLing, RetValLong()) → IAA = 10 と書き換える。 'AS03.Bas #Include "ASCom.bi" Function AS03_AAAA(TakaHWND As HWND, InValLing As Long, RetValLong() as Long) As Long Dim As Long IAA, IBB, ICC, IDD IAA = AS02_AAAA(TakaHWND , InValLing, RetValLong()) AS03_AAAA =IAA IDD = 0 For IBB = 1 To IAA For ICC = 1 To IAA DimDataLong2(IBB, ICC) = IBB*IAA + ICC If (RetValLong(IBB, ICC) <> DimDataLong2(IBB, ICC)) Then IDD = IDD +1 Next ICC Next IBB ReDim DimDataLong2(IAA, IAA) As Long, RetValLong(IAA, IAA) as Long ReDim DimDataString2(IAA, IAA) As String For IBB = 1 To IAA For ICC = 1 To IAA DimDataLong2(IBB, ICC) = IBB*IAA + ICC RetValLong(IBB, ICC) = DimDataLong2(IBB, ICC) Next ICC Next IBB End Function
922 名前:デフォルトの名無しさん [2016/10/17(月) 18:48:21.62 ID:f7KVzbkf.net] ASCom.bi の内容は以下の通り。 #include once "windows.bi" Declare Function AS01_AAAA(TakaHWND As HWND, InValLing As Long, RetVal() as Long) As Long Declare Function AS02_AAAA(TakaHWND As HWND, InValLing As Long, RetVal() as Long) As Long Declare Function AS03_AAAA(TakaHWND As HWND, InValLing As Long, RetVal() as Long) As Long Const DimDim As Long = 2 Dim Shared TakaHWND As HWND Dim Shared DimDataLong1() As Long Dim Shared DimDataLong2() As Long Dim Shared DimDataLong3() As Long Dim Shared DimDataString1() As String Dim Shared DimDataString2() As String Dim Shared DimDataString3() As String
923 名前:デフォルトの名無しさん [2016/10/17(月) 18:51:40.05 ID:f7KVzbkf.net] チュートリアルの最初の頃と同じように、何もしない表示枠を作成して ボタン(Button)3つ追加。 #Include "Mod/ASCom.bi" Dim As Long IAA, IBB Dim InValLing As Long, RetVal() as Long Case IDC_BTN1 ' IBB = AS01_AAAA(TakaHWND,IAA, RetVal()) Case IDC_BTN2 ' IBB = AS02_AAAA(TakaHWND,IAA, RetVal()) Case IDC_BTN3 ' IBB = AS03_AAAA(TakaHWND,IAA, RetVal()) とやるとハングする。どこに追加するのかは、わかるよね。 わからなかったらば全部まとめてupするから知らせて。 では今日はこれで。帰りは酔っぱらっているから、会話にならないと思う。
924 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 19:34:55.84 ID:ioKnq3J9.net] >>853 、>>854 、>>855 ざっとコード読んでみたけど、そりゃ上手く動かんだろうね >Dim InValLing As Long, RetVal() as Long ここで、RetVal()は動的配列を宣言して、その後関数に渡される 関数内の >If (RetValLong(IBB, ICC) <> DimDataLong2(IBB, ICC)) Then IDD = IDD +1 ^^^^^^^ この部分で配列RetValLong()を参照しているけど RetValLong()の参照元の動的配列RetVal()は、まだ具体的な要素数でメモリを確保していない redim RetValLong(IAA, IAA) as Longの場所が悪いね
925 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 20:05:26.95 ID:ioKnq3J9.net] 同様に>>854 のグローバル配列も関数内でredimで領域確保していないな >ReDim DimDataLong2(IAA, IAA) As Long, RetValLong(IAA, IAA) as Long こいつらの宣言場所が悪い まずさ、FreeBASICの言語機能を理解しようよ 言っちゃ悪いが、こんなの初歩だと思うんだけど…
926 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 20:28:00.52 ID:ioKnq3J9.net] それとさ サンプルコードなのだから取り敢えずいらない部分は削ぎ落とそうよ やっていることは至極簡単なのに余計な部分が多々あるから読み難いよ 動くかどうか試していないけど、取り敢えずいらないものを排除したコード 変数iddが何に使うのか知らんけど、一応入れておいた function AS03_AAAA(RetValLong() as long) as long dim as long iaa = AS02_AAAA(RetValLong()) dim as long idd redim DimDataLong2(iaa, iaa), RetValLong(iaa, iaa) for ibb as long = 1 to iaa for icc as long = 1 to iaa DimDataLong2(ibb, icc) = ibb * iaa + icc '' idd += -(RetValLong(ibb, icc) <> DimDataLong2(ibb, icc)) こういう書き方も出来る idd += iif(RetValLong(ibb, icc) <> DimDataLong2(ibb, icc), 1, 0) RetValLong(ibb, icc) = DimDataLong2(ibb, icc) next icc next ibb return iaa end function
927 名前:デフォルトの名無しさん mailto:sage [2016/10/17(月) 20:47:28.64 ID:ioKnq3J9.net] >>858 補足 redimはそれが宣言された時点でその型のデフォルト値で初期化されるから 値を保持したいなら、Preserve使ってな
928 名前:デフォルトの名無しさん [2016/10/18(火) 21:56:55.45 ID:1JWqtMl4.net] >>846 >アドレスを住所に置き換えたとしたら、ポインタはある地点の住所を書き留めたメモ 「住所を書き留めたメモ 」をアドレステーブル、中に書かれている「住所」をアドレスと呼んでいたのは、 機械語の限界が見えて(Winを使いだしてDebug.exeの使用を
929 名前:やめた)、来る前。 機械語に置き換えて考える癖が抜けないので、ポインターはアドレスだね。 機械語の場合、リロケートするのが*.comファイルなので、 アドレスといっても、相対アドレスの場合が多い。ポインターとの大きな違いはないと思われる。 [] [ここ壊れてます]
930 名前:デフォルトの名無しさん [2016/10/18(火) 21:59:11.60 ID:1JWqtMl4.net] リロケート(普通のOSの実行形式はこの形式)の意味は https://kotobank.jp/word/%E3%83%AA%E3%83%AD%E3%82%B1%E3%83%BC%E3%83%88-9856 リロケート禁止なシステムPGをやる人はいないと思う。
931 名前:デフォルトの名無しさん [2016/10/18(火) 22:54:11.09 ID:1JWqtMl4.net] >>851 MoriharuOhzu/ss-14083300 見直しながら、気が付いたこと。これ、ゲームソフトの考え方だよね。某氏の母校の。 ゲームソフトでは、盗作(懐石ともいう)を防止する観点から、解析が困難なソフトを用意する。 大体同じて、ちょっとだけ違う、ルーチンを大量に用意して解析されないようにする。 言語になれていない間は、 三項演算子の使用は、開発初期の試験プログラムでは危険。 理由は算術Goto文が消えたことを思い出してほしい。 Else 文は必須。 想定外の異常事態の処理、致命的エラーの処理に接続する。これをしないと、原因不明のもっともらしい値が得られるが虚偽で原因の特定にやたら時間がかかる。 バク取りが十分行われて、不要になれば、エディタの専用マクロ処理(Basicで組んでも良いけど)で一括削除すれば良いだけ。 スプール https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%97%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0 の使用は、スプーラの使用選定の問題、機種依存機能の問題等があるので、ある程度以上の能力のある人以外勧められない。 極端な場合、私が作ったソフトは、800*600 CRTディスプレーしか対応していません(他のディスプレイは持っていませんのて゜ソフトが作れません)、と個人では済ませてしまう方法がある。 しかし、スプーラーを入れると、スプールが対応しなければならないので、やたら面倒。
932 名前:デフォルトの名無しさん [2016/10/18(火) 22:55:59.03 ID:1JWqtMl4.net] 過去に作った作画ソフトで、初代がグラフィックディスプレーを使っていて、作画命令がタートルだった。 https://ja.wikipedia.org/wiki/LOGO 以後、処理系がタートルをさぼーとしていたので作画はタートルで処理・タートルで保存していた。 おかげで、V.B.で自前でタートルを作る羽目にあった。 色々ゴチャゴチャやったけど、APIを直接操作する特定の命令のルーチンを書いてきた。 自分で必要なルーチンはライブラリーで用意してあるから、これをAPIで対応させなければならない。 API関連が200位、ライブラリーの1/3位を占めている。 何の機能を用意して、何の機能を捨てるか、の取捨選択に迫られる。 慣れないと、この取捨選択は無理。できない。 FreeBasic でタートルをサポートしているのかな?。クラフィック関係までは手を出していない。 解の巣 (X-1)(X-1.1)(X-1.01)(X-1.001)中略 (X-1.?????1)=0 の解を求めよ なんて時まで使わないから。使いだすのはちょっと先。
933 名前:デフォルトの名無しさん [2016/10/18(火) 23:17:04.53 ID:1JWqtMl4.net] >>857 >んなの初歩だと思うんだけど… そりゃそうだ。 問題は、原因不明の変数食いつぶしが発生しているから、 意図的に、変数食いつぶしを発生するようなソフトを書いてみた。 DIM ???()宣言後に???()に値を定義すると 実行時の例外を表示後停止しないで、ハングする という仕様には参った。 ハングさせることに成功していないが、 構造体を宣言した後に構造体を構成する変数の一つを定義してから、引数に引き渡す必要がある模様。 makoto-watanabe.main.jp/freebasic/TutDynamicArrays.html >多くの人々が、動的配列で苦労をしている のもわかった。 エラーが表示されないで、ハングだから原因の特定にやたら手間がかかる。 >>858 >変数iddが何に使うのか知らんけど 例外の発生、つまり変数食いつぶしの発生を調べている。 IDD が1以上ならば、異常発生のメッセージを示すための物。 わざとおかしなソフトを書いて、暴走させて、どのような条件の時に暴走するか、を特定するのも 処理系を使用し始める時にすること。 分量が多くなってくると、訳が分からなくなるから 訳が分かる程度の少ない分量で、ハングさせることが必要になる。 余計な部分は、ある程度までできたらば、For-Next で回して、スタックを圧迫させるための物。 このルーチンを作っていないので、Const で定数にしておいた。
934 名前:デフォルトの名無しさん [2016/10/18(火) 23:43:13.10 ID:1JWqtMl4.net] 一つ思い出したこと。 処理系名がわからないのだが、Win95の頃のC言語で サブルーチン(又はファンクション)の深さが10から16を超えるとハングする という処理系があった。 そのため、サブルーチンコールを避けて、1000-3000行がざらな芋づるルーチンとしていた。 コンパイラー、特にスタック管理がよくないと、サブルーチンの深さでハングする。 画像データなんて使うと、MB単位でスタックに放り込むから要注意。
935 名前:デフォルトの名無しさん mailto:sage [2016/10/19(水) 00:16:50.83 ID:xkr0DzJS.net] >>862 >見直しながら、気が付いたこと。これ、ゲームソフトの考え方だよね。某氏の母校の。 全く違う、大事なことなのでもう一回言う、全く違う オブジェクト指向の考え方をここで説明することは到底無理なので 興味があったら独自に調べてよ そういう返答がくるとは全く想定していなかったわ 本気にそういう認識する人いるんだな >三項演算子の使用は、開発初期の試験プログラムでは危険。 ?
936 名前:デフォルトの名無しさん mailto:sage [2016/10/19(水) 00:25:01.97 ID:xkr0DzJS.net] >>864 >原因不明の変数食いつぶしが発生しているから ?、勘違いだと思うよ >エラーが表示されないで、ハングだから原因の特定にやたら手間がかかる。 動的配列を知ってたら、ミスすることはないと思うけどね まあ、標準の動的配列なんて余り使わないけどね 殆どの場合、静的配列で何とかなるし、new/delete使うし >>865 >サブルーチン(又はファンクション)の深さが10から16を超えるとハングする 今も変わらないんじゃない? そんなに多層に関数を呼び出すことないもの それも設計の問題でしかないよ
937 名前:デフォルトの名無しさん [2016/10/19(水) 00:52:12.31 ID:q7KUmHuY.net] >>867 >勘違いだと思うよ >>652-655 参照。 >静的配列で何とかなるし、 良いね。10位で作成して、100位で使っていて、10000-50000位のデータがたまに送られてくる。 >多層に関数を呼び出すことないも Quick Sort で再帰が5-6。 作った簡易電卓では、主ルーチンから、 1. 非常駐部マクロ実行の制御を呼び出して、 2. 常駐部通常実行ルーチンの呼び出し 3. 通常実行ルーチンから非常駐部のマクロ実行ルーチンを予備だす 4. 非常駐部のマクロ実行ルーチンから常駐部通常実行ルーチンの呼び出し(ここで再帰がかかる) 5. 常駐部通常実行ルーチンから、個別の非常駐部処理ルーチンを呼び出す と、ここまでに5重使ってしまう。 quick Sort で5重ぐらい使ってしまうから、 合計20位ないとQuickSort ができない。複数キーによる整列をかけるから、さらに再起呼び出しがかかる。
938 名前:デフォルトの名無しさん mailto:sage [2016/10/19(水) 00:56:32.69 ID:xkr0DzJS.net] まあ何というか、古い思想や概念を払拭出来ないから 知識が無駄になっているとしか言いようがないな 言語仕様の不理解、それを知識で補おうとするけれど それが上手く生かされていないって印象だな オブジェクト指向のスライドを提示したのも 手続き型言語でも有効な抽象化や汎化など考え方を理解してほしかったからなんだよね あのスライドを見て、そういった認識しか出来ないってのは残念でならないわ これまでのやり取りを振り返って思うことは 思考(思想も含む)と知識の切り離しが出来ていないから認識が不足するって事かな だから、知識の提示に躍起になっていて、こちらの言い分への理解に努めようとしない こっちは勉強になるけれども、もっと柔軟な思考を持った方が良いよ 思考がStaticおじさんと同等なのは本当に危機感持って欲しいわ
939 名前:デフォルトの名無しさん mailto:sage [2016/10/19(水) 01:09:20.38 ID:xkr0DzJS.net] >>868 勘違いじゃないの >>657 で問題点上げているじゃない >再帰 場合によっては利用するけれど 関数の再帰呼び出しはなるべくしないってのが一般的だと思うよ 再帰呼び出しを禁止するコーディング規約すらある 末尾再帰なら、普通にループ処理で実装可能だしね
940 名前:デフォルトの名無しさん [2016/10/19(水) 23:04:12.09 ID:q7KUmHuY.net] >>869 こういうのがわかりやすい。 www.comp.tmu.ac.jp/shintani/japanese/openUniversity/node5.html 一般的に挙げられるオブジェクト指向の三大概念について考えて見ましょう. 継承 (親から受け継ぐモノがたくさんあれば楽?) カプセル化 (細かいところは見せません・操作させません) 多態性 (問いかけに対する応答はオブジェクト自身が適切に判断) >な抽象化や汎化など考え方を >抽象化とは,ある物事(とその集団)から固有の特徴や共通部分を取り出す作業である より、ライブ(ラリー)化することでしょう。 ライブ化は、今やっているような動作試験に使うルーチンではいくらやっても無意味。 お遊びソフトを何本か作ってみて、共通部分が見いだせるような、ルーチンの作り方を覚えないと、使えないし、 定番ソフトに使えるようなルーチンを作れるようにならないと、 ライブ化は無理。元々持っていたライブラリーの修正は別にして、 新規に作ったソフトが15+42個。42個はもう使うことがない、としたソフト。 15個の内1個が既存のライブラリーの動作試験で、新規は残る14個。 14個は、全部廃棄予定だね、使い道がない。 つまり、このままではライブラリーに登録(抽象化)することはない。
941 名前:デフォルトの名無しさん [2016/10/20(木) 19:46:24.79 ID:48/+sWie.net] 大域宣言について 'Dim AAAA() 'DimChk11D.bas(6) error 146: Default types or suffixes are only valid in -lang deprecated or fblite or qb in 'Dim AAAA()' 'Dim Shard AAAA() 'DimChk11D.bas(8) error 146: Default types or suffixes are only valid in -lang deprecated or fblite or qb, found 'AAAA' in 'Dim Shard AAAA()' Dim Shared As Single AAAA() とこれが、大域配列の宣言となる。 Dim As Single AAAA() も可能ではあるが、Function で定義されるサブルーチンからの参照ができない。
942 名前:デフォルトの名無しさん [2016/10/20(木) 19:48:11.30 ID:48/+sWie.net] Redim の使用例。Function WndProc()内ルーチンだけ記載「IDC_BTN1」をクリックしてからでないとハングする。 クリックした後だと、添え字(()内数値)が範囲外でもそのにまま通ってしまう。 Case IDC_BTN1 ReDim AAAA(10) Case IDC_BTN2 AAAA(-1) = 1 Case IDC_BTN3 AAAA(0) = 1 Case IDC_BTN4 AAAA(1) = 1 Case IDC_BTN5 AAAA(10) = 1 Case IDC_BTN6 AAAA(11) = 1 Case IDC_BTN7 BBBB = AAAA(-1) Case IDC_BTN8 BBBB = AAAA(0) Case IDC_BTN9 BBBB = AAAA(1) Case IDC_BTN10 BBBB = AAAA(10) Case IDC_BTN11 BBBB = AAAA(11) 多分、Basic では、宣言がなくても、AAAA(10)の宣言があったものとして処理する、という処理系があるので、無前言でも使用できるように用意したルーチンだと思う。 全体が必要な人は知らせてくれ。D:\bas\Projects\DimChk11D\DimChk11D.bas 他をUPするから。
943 名前:デフォルトの名無しさん mailto:sage [2016/10/20(木) 20:49:23.76 ID:tZ8NDPa6.net] >>868 今時、オリジナルのQuickSortは使わんでしょ メディアンキラーの数列問題あるし、最悪時間がO(n * n)だし それこそ言う通りスタックオーバーフローの問題がある 一定の再帰深度に至ったらInsertionSortに切り替えたり MergeSortとの複合だったりするハイブリッドなQuickSortが主流よ 一般的にはIntroSortの名前で知られている >>871 その提示されたリンク先を見たら、その結論には至らないと思うけど? 自分も手続き型言語からオブジェクト指向型言語に
944 名前:w習を移したけど 根本的なコーディングの思考は両者共に変わらない 部品化して再利用と保守性を高めるコーディングが求められるのには違いがない コーディングによる思考と言語に求められる思考は同列ではない 話は変わるけど、ライブラリをライブって省略する人始めて見たよ [] [ここ壊れてます]
945 名前:デフォルトの名無しさん mailto:sage [2016/10/20(木) 20:53:50.31 ID:tZ8NDPa6.net] >>872 >'Dim AAAA() >'Dim Shard AAAA() FreeBASICは静的型付け言語 >Dim Shared As Single AAAA() >とこれが、大域配列の宣言となる。 >Dim As Single AAAA() >も可能ではあるが、Function で定義されるサブルーチンからの参照ができない。 これ前にも指摘したよね グローバル変数、スコープなどなど
946 名前:デフォルトの名無しさん mailto:sage [2016/10/20(木) 21:00:34.59 ID:tZ8NDPa6.net] >>873 >多分、Basic では、宣言がなくても、AAAA(10)の宣言があったものとして処理する >という処理系があるので、無前言でも使用できるように用意したルーチンだと思う。 他のBASIC系がそういった処理であろうがなかろうがFreeBASICには関係ない FreeBASICにはそれの仕様がある 勝手な解釈をしないで、マニュアル読みなさいよ 単純に範囲チェックをしていないだけ 何のためにlbound()やubound()が用意されていると思ってんの 範囲チェックは配列の外で独自にやる仕様なの
947 名前:デフォルトの名無しさん [2016/10/20(木) 22:31:20.44 ID:48/+sWie.net] >>874 >一定の再帰深度に至った 以後知らなかった。 >ライブって省略する人始めて見たよ ライブ(LIB)、ライブラ(libr)が省略語。 ライブラリー(library)を起動したときに表示されるコマンドプロンプトの読み。 LIB> とか LIBR■ とか表示された機械を使っていた。 >>875 今までの経緯をまとめただけ。 必ずハングするソフトを作成しておくと、以後の保守の参考になる。 >>876 >用意されていると思ってんの こんな便利なもの Fotran6にはなかった。 Dim 実行時の範囲(the total number)を定義した変数(N,M,L とコピーNN, MM, LL)を残しておくのが、多くのFotran のライブ。 極端な言い方をすれば、 10次元とか20次元の数値を使うことになりかねないので、大域のDim実行を一つのフラグにまとめて初期化している。 初期化フラグをみて非参照側は、処理せずRteurnするか、処理をするかの判断をしている。 メニュー側は、Hide(SW_HIDE, SW_SHOW)とかの処理になる。 このあたりは全部省略した。
948 名前:デフォルトの名無しさん mailto:sage [2016/10/20(木) 22:43:15.63 ID:tZ8NDPa6.net] >>877 まあ確かに、LibraryをLibって省略するけど 日本語に訳した語句を文章に書く人も始めて見たよ そういうのはなるべく元の英文で書いた方が良いよ 勘違いの元になるから >こんな便利なもの Fotran6にはなかった。 FreeBASICマニュアルの熟読が必須だな FreeBASICは手続き型言語が元だから OOP言語の要素を取り入れてもその形態は変わらないと思う C++に近い感じ だけど、グローバル変数の使用は控えた方が良いね 大抵の場合、使わなくてもコードは書けるからね
949 名前:デフォルトの名無しさん [2016/10/20(木) 22:45:33.28 ID:48/+sWie.net] 古いC言語の資料で 構造体などの入力変数を、いつ、どこで、だれが、どのように、初期化するのか はっきりしていない との記載があった。 Dim as (適当な型名) (適当な変数) で初期化されるのか、 (適当な変数).(適当な要素名) = (適当な値) で初期化される(すべての要素に値が定義される)のか、 が見つからなかった。 大域の数値・文字変数の宣言は、 makoto-watanabe.main.jp/freebasic/ProPgErrorHandling.html >エラーは、静かに無視され、コードの実行は、続きます。 というので、エラーコードの取得を目的に作った。 >コードは、ERR 関数を使って、次の行で、可能な誤りを処理するべきです。 だから、あえて、N等を使わないで実行させた。
950 名前:デフォルトの名無しさん mailto:sage [2016/10/20(木) 22:57:31.91 ID:tZ8NDPa6.net] >>879 FreeBASICの構造体、type ... end typeは Cの構造体的な古い使い方も出来るけど、基本はOOPのクラスのように使う クラスの初期化は、クラスが行う FreeBASICではconstructor()の特殊メンバー関数が用意されている この辺り、かなり覚えることが
951 名前:多くなるから、まだ手を出さない方が良いよ [] [ここ壊れてます]
952 名前:デフォルトの名無しさん [2016/10/20(木) 23:05:48.47 ID:48/+sWie.net] 古いC言語の資料で、 (For-Next, Do-Loop, While-Wend 等の)ループ処理で、途中からの飛び出し命令(Exit For, Exit Do)を使うと スタックに関係変数が残り、メモリーリークの原因になる 同様に、サブルーチン(Exit Function, Exit Sub 等)でも起こりうる For-Next はループ変数に終値を代入して飛び出すか、フラグを立てて内部処理をしないで回す、等の処理が必要 なんてのが、あったんだが、 ttp://www.slideshare.net/MoriharuOhzu/ss-14083300 では、やたら飛び出しを勧めている。 手持ちの流れ図作成ソフトでは、Exit Sub 等を理解できないので、ブロックIF文で末尾に飛ばしていた。 流れ図作成ソフトでチェックしていた非常駐部等の処理(Call モジュール名.ルーチン名)が出てきてないが ReDim の処理の検査として、流れ図作成ソフトで変数の追跡をする関係もある。
953 名前:デフォルトの名無しさん mailto:sage [2016/10/20(木) 23:56:24.26 ID:tZ8NDPa6.net] >>881 FreeBASICは関数やループブロックから飛び出しても問題ない Gotoで飛び出しても大丈夫なくらい、きっちりと処理してくれる C/C++でも問題ない 情報が古すぎるよ N88BASICを思い出したわw 浦島状態なの?
954 名前:デフォルトの名無しさん [2016/10/21(金) 00:06:56.14 ID:5SWCZ9aM.net] >>882 助かるわ。 >浦島状態なの? 近い。 V.B. 6.0の頃で金がなくてNetが買えなくて、ズルズル。 V.S. のお試し版を入れて、操作がさっぱりわからなくて、削除。 さっき、変な英語のメッセージが出たので、なんか残っているみたい。 N88は、3か月ぐらい使っていた。課長と隣課の係長が変なことを言い出したので、 N88は使うのをやめた。係長が使っていたけど。 N88はロードランナーに徹した。 リセッターになるべく見ていたけど、結局わからなかった。
955 名前:デフォルトの名無しさん mailto:sage [2016/10/21(金) 00:18:27.22 ID:AfigWPHq.net] >>883 なるほど、こりゃ一苦労だな もうね、君とのやり取りで、これまで自分が言ってきた数々のことを 何も考えずに信じて、頭空っぽにして一から学習した方が良いな 古い思想や概念を捨てきれない人って思ってたけど 単に時代の流れに取り残されただけなんだな(失礼) Staticおじさんとはまた違うタイプだわ せっかく学習する気になっているのだから 新しい思想や概念を新しい言語と共に習得して欲しいわ(本気で懇願するわ) これは正にチャンスだよ
956 名前:デフォルトの名無しさん [2016/10/21(金) 00:54:30.23 ID:5SWCZ9aM.net] >>877 の続き。 大域変数の宣言は Sub CommonStringSet() CommonStringSetFig = 1 Ierror = 0 Dim なんたらかーたら Call あれれ.○×▼initialize IF (Ierror = 0) then CommonStringSetFig = 2 End Sub で初期化して Sub なんか仕様() IF (CommonStringSetFig = 0) then Call CommonStringSet() IF (CommonStringSetFig <= 0) then '未初期化、初期化ルーチンの障害等 ElseIF (CommonStringSetFig = 1) then '初期化作業中 'あれれ.frmから参照がある場合等 ElseIF (CommonStringSetFig = 2) then '初期化終了 else '致命的障害・終了処理中 end IF End sub でやっていた。なんかの参考にして。ベン図 https://kotobank.jp/word/%E3%83%99%E3%83%B3%E5%9B%B3-8692#E6.97.A5.E6.9C.AC.E5.A4.A7.E7.99.BE.E7.A7.91.E5.85.A8.E6.9B.B8.28.E3.83.8B.E3.83.83.E3.83.9D.E3.83.8B.E3.82.AB.29 の場合分けを徹底しておかないと、不定の値で計算してしまう、なんて発見が困難な障害に出会うことになる。
957 名前:デフォルトの名無しさん [2016/10/21(金) 20:13:13.49 ID:5SWCZ9aM.net] 現在 556KB、500KB越で書き込みが一切できない板もある。 新スレを作る話
958 名前:をしていた方々、ヨロ。 [] [ここ壊れてます]
959 名前:デフォルトの名無しさん [2016/10/21(金) 20:25:40.68 ID:5SWCZ9aM.net] こんなのを作ってみた。マルチモジュール。IDC_BTN1-IDC_BTN3でちょっと違う。連続して書いたらば禁止用語で引っかかった。 Case IDC_BTN1 → Case IDC_BTN2 → Case IDC_BTN3 Dim As Long IAA, IBB, ICC IAA = 10: ICC = IAA IBB = AAAA( IAA) → IBB = AAAAByVal( IAA) → IBB = AAAAByRef( IAA) MessageBox(TakaHWND,
960 名前:デフォルトの名無しさん [2016/10/21(金) 20:27:41.63 ID:5SWCZ9aM.net] 途切れたので、途切れた部分から続き MessageBox(TakaHWND, "Hello ("+ Str$(IBB)+") " + Str(IAA) +"/"+Str$(ICC), "Messagebox caption", MB_ICONINFORMATION) 同じくIDC_BTN4-IDC_BTN6でちょっと違う。 Case IDC_BTN4 → Case IDC_BTN5 → Case IDC_BTN6 Dim As Long IAA, IBB, ICC IBB = BBBB(TakahWnd) → IBB = BBBBByVal(TakahWnd) → IBB = BBBBByRef(TakahWnd) 以下 D:\bas\Projects\DimChk11E\DimChk11E01.basの内容。 Function AAAA( IAA As Long) As Long IAA = 5 AAAA = 8 End Function 以下、AAAA系統で、異なる点だけ。 Function AAAAbyVal(ByVal IAA As Long) As Long AAAAbyVal = 8 Function AAAAbyRef(ByRef IAA As Long) As Long AAAAbyRef = 8
961 名前:デフォルトの名無しさん [2016/10/21(金) 20:30:04.01 ID:5SWCZ9aM.net] 次にBBBB系統。 Function BBBB(TakahWnd As HWND) As Long Dim As Long IAA, IBB, ICC IAA = 10 ICC = IAA IBB = AAAA( IAA) MessageBox(TakaHWND, "Hello E("+ Str$(IBB)+") " + Str(IAA) +"/"+Str$(ICC), "Messagebox caption", MB_ICONINFORMATION) BBBB = 9 End Function 違うところだけ Function BBBBbyVal(TakahWnd As HWND) As Long IBB = AAAAbyVal( IAA) BBBBbyVal = 9 Function BBBBbyRef(TakahWnd As HWND) As Long IBB = AAAAbyRef( IAA) BBBBbyRef = 9
962 名前:デフォルトの名無しさん [2016/10/21(金) 20:41:44.32 ID:5SWCZ9aM.net] 要点は、Function なんたら() の引数の前置句を 無指定、ByVal, ByRef の3種類用意した。 参照側 → 非参照側への値の引き渡しは、今回は試していないが、無指定で可能。 しかし、 非参照側 → 参照側への値の引き渡しは、ByRef のみ可能 という結論に達した。 makoto-watanabe.main.jp/freebasic/ProPgPassingArguments.html で、 >これは、手続きは、手続きに渡された元の変数やオブジェクトを、変更できることを意味します。 と、主語が2つあるやや難解な日本語で説明されていた。 QBでは、どっちの方法をとっても、非参照側⇔参照側の相互引き渡しが可能であった。 これを発見するまでは、かなり苦労した。 Basic は、大域に全数値が置かないと、自由に変数をいじれない、という現実が立ちはだかっていたのである。 なるべく早く、フローチャート作成ルーチンを復活させないと、 引数で非参照側から参照側へ値を送っているルーチンがほとんど(無理やりSub → Functionに書き換えた)のルーチンが使い物にならなくなる。
963 名前:デフォルトの名無しさん [2016/10/23(日) 10:06:03.38 ID:xOvwZfT4.net] 構造体の初期化に関して、 手持ちのMIDIによるBEEP音が 'park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200707/07070177.txt しかないので、これ関係。 'declare function midiOutOpen(byval phmo as LPHMIDIOUT, byval uDeviceID as UINT, byval dwCallback as DWORD_PTR, byval dwInstance as DWORD_PTR, byval fdwOpen as DWORD) as MMRESULT より、 Dim midHnd As HMIDIOUT__ Dim ImidHndPTR As HMIDIOUT = @midHnd Dim ImidHndPTRPTR As LPHMIDIOUT = @ImidHndPTR を用意して midHnd.unused = 0 If (ImidHndPTR <> @midHnd) Then MessageBox(TakaHWND, "Hello (ImidHndPTR) 範囲外" + Str(ImidHndPTR)+","+Str$(@midHnd), "Messagebox caption", MB_ICONINFORMATION) EndIf If (ImidHndPTRPTR <> @ImidHndPTR) Then MessageBox(TakaHWND, "Hello (ImidHndPTRPTR) 範囲外" + Str(ImidHndPTRPTR)+","+Str$(@ImidHndPTR), "Messagebox caption", MB_ICONINFORMATION) EndIf とやったらば、MessageBox()が実行されなかった。だから、構造体に値が入っているかどうかは別にして、 アドレス(ポインター)はDimで決定されるみたい。
964 名前:デフォルトの名無しさん [2016/10/23(日) 10:15:29.01 ID:xOvwZfT4.net] MSの Replace()は、手持ちで類似ルーチンがあるので、類似ルーチンを使用して MSReturnCode = midiOutOpen(@ImidHndPTR, MIDI_MAPPER, 0, 0, CALLBACK_NULL) MSReturnCode = midiOutClose(@midHnd) Private Function BeepMidiOut(ImidHnd As HMIDIOUT__, DataString as String) As Long 'ルーチン名の変更 Sub Midi_out() →
965 名前:Sub BeepMidiOut() ImidHndPTR = @ImidHnd ImidHndPTRPTR = @ImidHndPTR MSReturnCode = midiOutPrepareHeader(ImidHndPTR, @lpMidiOutHdr, Len(lpMidiOutHdr)) MSReturnCode = midiOutLongMsg(ImidHndPTR, @lpMidiOutHdr, Len(lpMidiOutHdr)) で、コンパイルエラーはなくなった。 しかし、ハングする。今のところ、対応はわからない。 [] [ここ壊れてます]
966 名前:デフォルトの名無しさん [2016/10/23(日) 14:27:32.03 ID:xOvwZfT4.net] >>892 のつづき。 TakaDammyReturnCode = BeepMidiOut(midHnd, MdiMsg) 入れておく必要があるかな?。 機械の方のMIDIを見るべく、手持ちのMIDIファイルをエクスプローラーでクリック。 MIDI 音源がありません とのこと。MIDI 関係はここで打ち切り。 Win 10, 32bit で動きそうな仮想音源があったらば、知らせてほしい。 検索で見つかったところは、 homepage3.nifty.com/3gatudo/mididl.htm ぐらいで、 Microsoft GS Wavetable SW Synth は見つからない。DirectXが入っていないのかもしれない。 SW−10 は、Nifの販促CD-ROM(2001)より。ソフトが起動してしまって、中身が見られなくて、スージーを使ってコピー。 起動したけど、動かなかった。 S−YGX50 は、ヤマハのサイトが見つからなくて試せず。
967 名前:デフォルトの名無しさん [2016/10/23(日) 20:38:27.04 ID:xOvwZfT4.net] makoto-watanabe.main.jp/freebasic/tipsFileDialog.html#start いじったことのある方へ。 当方 Win10, 32Bit で以下の障害メッセージが発生。 先頭から '********************* Usage: ***************************** までを D:\bas\Projects\File03\Mod\FL01SBCom.BI へコピー。 Function FileSelectFolder (Byref title As String = "Choose A Folder", ByVal nCSIDL As Integer, iFlags As ULong = BIF_EDITBOX, ByRef sz_InitialDir As String) As String 'D:\bas\Projects\File03\Mod\FL01SBCom.BI(91) warning 36(0): Mismatching parameter initializer, at parameter 3 (iFlags) of FileSelectFolder() ret = SHGetSpecialFolderLocation(HWND_DESKTOP, nCSIDL, @bi.pidlRoot) 'D:\bas\Projects\File03\Mod\FL01SBCom.BI(101) error 180: Invalid assignment/conversion, at parameter 3 of SHGETSPECIALFOLDERLOCATION() in 'ret = SHGetSpecialFolderLocation(HWND_DESKTOP, nCSIDL, @bi.pidlRoot)' ret = SHGetFolderLocation(HWND_DESKTOP, CSIDL_DESKTOP , NULL, NULL, @bi.pidlRoot) 'D:\bas\Projects\File03\Mod\FL01SBCom.BI(106) error 180: Invalid assignment/conversion, at parameter 5 of SHGETFOLDERLOCATION() in 'ret = SHGetFolderLocation(HWND_DESKTOP, CSIDL_DESKTOP , NULL, NULL, @bi.pidlRoot)' CoTaskMemFree bi.pidlRoot 'D:\bas\Projects\File03\Mod\FL01SBCom.BI(135) error 180: Invalid assignment/conversion, at parameter 1 of COTASKMEMFREE() in 'CoTaskMemFree bi.pidlRoot' 以上、警告メッセージ1、障害メッセージ3が発生。
968 名前:デフォルトの名無しさん [2016/10/23(日) 20:46:42.61 ID:xOvwZfT4.net] #Ifndef _FILE_HELPERS_WIN32 という、コンパイラに対する命令文の意味が分からず C:\tool\FreeBASIC "C:\FbEdit" makoto-watanabe.main.jp/freebasic/ ではヒットしない。 誰かが、何かの条件で、どこかで決めているはずだけれども search.yahoo.co.jp/search;_ylt=A2RA2EPKogxYJGMA2UIDdNt7?p=_FILE_HELPERS_WIN32&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=&afs= では、本家と日本語サイトのみに記載有り。
969 名前:デフォルトの名無しさん mailto:sage [2016/10/23(日) 22:49:17.73 ID:LVHhfsuk.net] >>895 #Ifndef _FILE_HELPERS_WIN32 #Define _FILE_HELPERS_WIN32 #Endif そりゃそうだw このマクロは「インクルードガード」だもの これが何なのかはググってね
970 名前:渡辺真 [2016/10/23(日) 23:24:58.78 ID:jMLXBD1u.net] >>893 >Win 10, 32bit で動きそうな仮想音源があったらば、知らせてほしい。 直接の返答にはなっていませんが、私の Win10 32bit では、下記を実行したら MIDI を再生できました。 makoto-watanabe.main.jp/freebasic/E
971 名前:xtLibfmod.html [] [ここ壊れてます]
972 名前:デフォルトの名無しさん [2016/10/24(月) 21:19:21.72 ID:sdyc/Oh5.net] >>897 関連。 UsingFMOD_A_Tutorial.zip の入手には成功。 使われているファイル、"fmod.bi"の所在が分からず、ネットを検索して見つからず。 ネットをfmod.dll で検索していたら、本体に入っているらしき文言があり、手持ちのファイルを検索したら C:\tool\FreeBASIC\inc\fmod.bi に発見。 C:\tool\FreeBASIC\内を検索して、米国では普及している音楽ファイル *.mod の再生ルーチン C:\tool\FreeBASIC\examples\manual\libraries\fmod1.bas *.mp3 再生ルーチン C:\tool\FreeBASIC\examples\manual\libraries\fmod2.bas C:\tool\FreeBASIC\examples\sound\FMOD\mp3-player.bas を発見した。 なお、www.fmod.org/ には課金情報の記載もあり、 英語が天才的にできない吾輩としては、API情報などの入手はあきらめることにした。 手持ちのMIDIによるBEEP音 'park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200707/07070177.txt は、1バイトづつ送って再生するルーチンを使っているので、 ファイルを一括出力する makoto-watanabe.main.jp/freebasic/ExtLibfmod.html とは考え方に違いがあり、同様な使い方はできない。 MIDIファイルを大量に作成して、使うことが原則となる。 ファイル管理等のルーチン作成が必要になった。 なお、まだ音は出していない。 コンパイラーを通して、エラーが出なくなって、 常駐しない実行形式のファイルが作成できただけ。
973 名前:デフォルトの名無しさん [2016/10/24(月) 21:22:53.53 ID:sdyc/Oh5.net] DIMの有効範囲について、次のように、 IFブロック内宣言をすると、IFブロック外で参照できない、 という仕様を発見した。 Function PlayMIDIfile1(ByRef ActionType As Integer) As Long Dim As Long IAA, IBB PlayMIDIfile1 = 0 If (IAA = IBB) Then ActionType =0 Else ActionType =1 Dim As Long Ptr IAAptr = @IAA IBB = *IAAptr 'エラー発生せず EndIf If ( ActionType =1 ) Then ' IBB = *IAAptr: 'ここでエラー 'BeepFmod.bas(45) error 41: Variable not declared, IAAptr in 'IBB = *IAAptr' EndIf End Function
974 名前:デフォルトの名無しさん [2016/10/24(月) 21:34:57.84 ID:sdyc/Oh5.net] >>896 www.slis.tsukuba.ac.jp/~fujisawa.makoto.fu/cgi-bin/wiki/index.php?C%2CC%2B%2B%A5%E1%A5%E2#c98802a3 ヘッダファイルなどが複数回読み込まれるのを防ぐのに#ifndefを用いる. #ifndef _HEADER_H_ #define _HEADER_H_ ヘッダの内容 #endif // _HEADER_H_ ユーザーレベルで(プログラム作成者が)決定する内容なのね、 こりゃ、訳が分からぬ内容だわ。
975 名前:デフォルトの名無しさん [2016/10/24(月) 23:05:55.00 ID:sdyc/Oh5.net] >>898 のつづき。 再生に成功した。正しい物理調律による不協和音の連続となる、MIDI再生。 安物の低性能スピーカーに対応した、MP3再生に。 MIDIは、 ファイル終了後繰り返し再生になって、制御が参照ルーチンに戻ってこない という状態。 MP3再生終了後に、制御が参照ルーチンに戻る、 という状態。 前者を制御しているのが゜Sleep 命令らしい、というところまではつかんだ。 www.fmod.org/ ではゲーム音楽が主体という解説があり、何らかの手段でマルチタスク化、つまり、音楽再生を続けたまま制御が参照側に戻るという処理があるはずなのだが UsingFMOD_A_Tutorial\basic_fmod_guide.txt には、 If your needs extend beyond this tutorial, you are encouraged to explore additional FMOD calls and its documentation. このチュートリアルを超えて使用する必要性がある場合は、FMODのマニュアルに追加されたのFMOD関係参照を調べることをお勧めします。 とあり、basic_fmod_guide.txtの英文解読が必要の模様。 FMODのマニュアルは会員制のため、英語が天才的にできない吾輩としては、あきらめる必要がある。 www.freebasic.net/wiki/wikka.php?wakka=Ke
976 名前:yPgSleep と比較して、 http://makoto-watanabe.main.jp/freebasic/PgSleep.html で気が付いたこと。 任意の旗。 通常の睡眠に対して、0 の値を与えます。 Optional flag; give it a value of 0 for a normal sleep, より、日本語訳の「旗」、原文の「flag」は、ユーザーが指定するから、スイッチの意味と思わせれる。 「通常の睡眠」は、「通常のsleep(命令)」の意味でしょう。 「「深い」睡眠」、原文の「 a "deep" sleep」は、""が使われていることから辞書用語 https://kotobank.jp/ejword/deep ではあまり使われない「5 (程度が)強度の, 極度の, 強烈な」の意味と思われます。 キー入力を受け付けない、ことを「deep」と表現しているものと思われます。 [] [ここ壊れてます]
977 名前:渡辺真 [2016/10/25(火) 00:45:39.69 ID:wjYYOxoL.net] >>898 >1バイトづつ送って再生するルーチンを使っている ToneGrid - Playing MIDI Notes www.freebasic.net/forum/viewtopic.php?t=21027 と QB like PLAY plus more... www.freebasic.net/forum/viewtopic.php?t=12995 が役に立ちそうですね。
978 名前:渡辺真 [2016/10/25(火) 00:50:54.71 ID:wjYYOxoL.net] >>902 #include once "windows.bi" #include once "win\mmsystem.bi" type MidiMessage field=1 Number as UByte ParmA as UByte ParmB as UByte Reserved as UByte end Type #define MidiSendMessage(MSGVAR) midiOutShortMsg(MYPLAYDEVICE, *cptr(integer ptr,@MSGVAR)) dim shared as HMIDIOUT MYPLAYDEVICE '// MIDI device interface for sending MIDI output var FLAG = midiOutOpen(@MYPLAYDEVICE, MIDI_MAPPER, 0, 0, null) if (FLAG <> MMSYSERR_NOERROR) Then print "Error opening MIDI Output." end If Dim Shared as MidiMessage MidiMsg MidiMsg.Reserved = 0 Sub NoteOn(channel As UByte, note As UByte, velocity As UByte) MidiMsg.Number = &h90 + (channel And &hf) MidiMsg.ParmA = (note And &h7f) 'NOTE MidiMsg.ParmB = (velocity And &h7f) 'volume MidiSendMessage(MidiMsg) End Sub Dim I As Integer For I =1 To 50 NoteOn(0,I,127) Sleep 200 Next I
979 名前:デフォルトの名無しさん [2016/10/26(水) 00:12:47.34 ID:iMPAbDCn.net] >>902 現在、ソースリストを解読中。 midiOutOpen(@MYPLAYDEVICE, MIDI_MAPPER, 0, 0, null) の戻り値が 2 となっているので、MIDIドライバーを入れない限りは動作不能。 本家を検索して、FMOD の定数の定義らしきものを発見。 #define FSOUND_LOOP_OFF 0x00000001 /* For non looping samples. */ 等。 解読には時間がかかりそう。 MIDIは正確な物理調律をしているので、不協和音となりやすい。 だから、警告音としては最適なんだけど、現在使えない。
980 名前:渡辺真 [2016/10/26(水) 10:24:24.17 ID:zIa530P9.net] >>904 >MIDIは正確な物理調律をしているので、不協和音となりやすい。 私の Win10 32bit では、 makoto-watanabe.main.jp/freebasic/tipsMIDI.html の「QB like PLAY plus more...」の「BrazillianThemeMusic.bas」(PlayMidi.bas を含む。PlayFMOD.bas ではないので注意。) を実行したところ、単音ですが音楽を再生できました。
981 名前:デフォルトの名無しさん [2016/10/28(金) 19:40:16.34 ID:zii2+97k.net] MIDI ドライバーを入手することに成功した。 rksw.blog.fc2.com/blog-entry-14.html Win8- 10 でMIDIが鳴らない人ならば試す価値があると思う。 coolsoft.altervista.org/en/virtualmidisynth 私が引っ掛かったのは「virtualMIDISynthの初期画面」で、 右上の「+」を押すとファイル選択画面になること、「十
982 名前:噬{タンで、」がわからなかった。 導入先が、C:\Windows\Win32\ 内固定なので、エクスプローラーの 「表示」でみられる、右上端のほうの「隠しファイル」にレ印を入れないと導入先が見つからない。 しかも、一旦エクスプローラーを終了して、再起動しないと、表示内容が更新されない。 「SGM-V2.01」の圧縮が 7-ZIPで http://www.vector.co.jp/soft/dl/win95/util/se252429.html 2014.07.04に新バージョンになっている。 旧バージョンの2004年版を使っていたが、2004年版では解凍できなかった。 使っている操作ソフトは、以前はベクターにあったのだが、現在行方不明に付お知らせできません。 http://www.csdinc.co.jp/archiver/ で差がしてください。 >>903 は音が出ました。 ドライバーの問題が解決したので、MIDI関係の進捗が見込めます。 NoteOn 関係を探してみたら http://www.g200kg.com/jp/docs/tech/midi.html を発見。 種類が多いので、ハンドDTM、つまり、BasicソフトでMIDI-Massige を送信しながらの作曲は、敷居が高そう。 高校の時に、合計2時間ぐらい作曲を教えてもらって、何曲か作ってみたけれど オルガンで弾いても幽霊の登場シーンのような不気味な曲になる。 [] [ここ壊れてます]
983 名前:デフォルトの名無しさん [2016/10/31(月) 20:43:37.20 ID:+6lHFHa+.net] ちょっとMIDIから外れるのだが、 スーパーの文具売り場で、学校教育用カスタネット350円を買ってきた。 手持ちのオルガンと合わせて、作曲用機材はそろった。
984 名前:デフォルトの名無しさん [2016/10/31(月) 21:47:59.25 ID:+6lHFHa+.net] Function midiOutLongMsg()の使用で、 lpMidiOutHdr.lpData = VarPtr(MLMsg(0)) lpMidiOutHdr.dwBufferLength = UBound(MLMsg) + 1& と、連続する領域にMIDIデータを保存することが必要となる。 >>829 で指摘があった通り、配列を確保すると各要素に約40バイトの付属データが伴う。 つまり、MSが規定している MIDIHDR 構造体のlpMidiOutHdr.lpDataの示すアドレスからlpMidiOutHdr.dwBufferLength個の連続した主記憶装置にMIDIデータを保存するための領域が確保できないことを示している。 これ関係での動作試験。 Dim12SB1.bas に保存。DimChk12.basより参照。
985 名前:デフォルトの名無しさん [2016/10/31(月) 21:48:57.96 ID:+6lHFHa+.net] Public Function StringPeek(ActionType As Long) As long StringPeek = 0 Const LenZstring = 20 Dim As ZString * LenZstring AAzstring, BBzstring, CCzstring Dim As String AAstring, BBstring Dim As Long IAA, IBB, ICC Dim As ZString Ptr AAzstringPTR AAstring = "" For IAA = 1 To LenZstring AAstring = AAstring + Str$(IAA Mod 10) Next IAA AAZString = AAstring AAzstringPTR = @AAZString MessageBox(TakaHWND,"Hello ("+AAZString+")"+Str$(Len(AAzstring))+" , "+Str$(len(CCzstring)),"Messagebox caption",MB_ICONINFORMATION) BBstring = "" For IAA = 0 To LenZstring -1 IBB = Peek(UByte, AAzstringPTR + IAA) BBstring = BBstring + Str$(IBB - &h30) Next IAA BBZString = BBstring If (AAZString <> BBZString) Then MessageBox(TakaHWND,"Hello ("+BBZString+") ("+AAzstring+")","Messagebox caption",MB_ICONINFORMATION) Else MessageBox(TakaHWND,"Hello ("+BBZString+")"+Str$(Len(AAzstring))+" , "+Str$(len(CCzstring)),"Messagebox caption",MB_ICONINFORMATION) EndIf End Function とまー、何とか領域が確保できた。
986 名前:デフォルトの名無しさん [2016/10/31(月) 21:52:07.76 ID:+6lHFHa+.net] 今度は構造体での指定と、データ転送。 Zstring で&h00-&hFFのデータを取り扱えるかどうか、Poke で転送しなければならないのかは不明。 今日はここまで。
987 名前:デフォルトの名無しさん [2016/11/01(火) 19:56:19.86 ID:B69ilPhK.net] Const MLMsgTSU = 64 Dim MLMsg() As UByte Dim MLMsgString as String, MLMsgZString as ZString * MLMsgTSU Dim As Long IAA, IBB, MLMsgSU Dim lpMidiOutHdr As MIDIHDR: ' MIDIHDR 構造体 Dim ImidHndPTRPTR As LPHMIDIOUT ImidHndPTRPTR = @ImidHndPTR: 'ImidHndPTR = @ImidHnd IBB =
988 名前:Len(DataString): IAA = IBB Mod 2& If (IAA <> 0&) Then DataString = Left$(DataString, Len(DataString) - 1&) MLMsgSU = Len(DataString) \ 2& - 1& If (MLMsgSU <= 0&) OR (MLMsgSU > MLMsgTSU- 3)Then Else ReDim MLMsg(0& To MLMsgSU): MLMsgString = "" For IAA = 1& To Len(DataString) Step 2& IBB =Val("&H" & Mid(DataString, IAA, 2&)) MLMsg((IAA - 1&) \ 2&) = IBB MLMsgString = MLMsgString + Chr$(IBB) Next IAA MLMsgZString = MLMsgString For IAA = 0& To MLMsgSU If Asc(Mid$(MLMsgZString, IAA+1,1)) <>MLMsg(IAA) Then MessageBox(TakaHWND, "ZString("+Str$(MLMsg(IAA))+") と異なります"+Str$(IAA), "Messagebox caption", MB_ICONINFORMATION) Next IAA lpMidiOutHdr.lpData = VarPtr(MLMsgZString) lpMidiOutHdr.dwBufferLength = MLMsgSU + 1& lpMidiOutHdr.dwFlags = 0& MSReturnCode = midiOutPrepareHeader(ImidHndPTR, @lpMidiOutHdr, Len(lpMidiOutHdr)) [] [ここ壊れてます]
989 名前:デフォルトの名無しさん [2016/11/01(火) 20:03:22.69 ID:B69ilPhK.net] で、音が出た。Dim MLMsg() As UByte の場合と音が同じ。 とすると、Byte型配列の場合には、テータが連続して存在するのかもしれない。 前は、Dim MLMsg() As Byte だったんだが、Srt$()で-120とかの負数が表示される。 このため、as Byte から As Ubyte に変更した。 出た音は、Win2000の頃の音とは異なる。どこが原因なのかは特定できていない。
990 名前:デフォルトの名無しさん [2016/11/01(火) 20:06:39.53 ID:B69ilPhK.net] 音量調節関係 Public Function BeepInfomation(ActionType As Integer, ByRef CurrentVolLeft As ULong, ByRef CurrentVolRight As ULong, ByRef IER As Long) As Long '*-* 音量調節 'ActionType = {1;音量取得, -1;音量設定} Dim BothVolumes As DWORD Dim MSerrorCodeMM as MMRESULT Dim WAVEOUT as HWAVEOUT__ Dim WAVEOUTptr as HWAVEOUT Dim WAVEOUTptrPtr as LPHWAVEOUT WAVEOUTptr = @WAVEOUT WAVEOUTptrPtr = @WAVEOUTptr BeepInfomation = 0 IER = 0 If (ActionType = 1) Then MSerrorCodeMM = waveOutGetVolume(0, @BothVolumes) CurrentVolLeft = LoWord(BothVolumes) CurrentVolRight = HiWord(BothVolumes) ElseIf (ActionType = -1) Then BothVolumes = CurrentVolRight * &h10000 + CurrentVolLeft MSerrorCodeMM = waveOutSetVolume(WAVEOUTptr, BothVolumes) Else IER = 10 End If End Function で音量変更ができた。次回はミュート関係の予定。
991 名前:717 mailto:sage [2016/11/02(水) 09:40:51.99 ID:LbzPwQ+w.net] >>886 今回でいったん終わりの扱いでいい。 継続スレは要らないから関与しない。 要望が出ても俺は立てない。新しいスレが立っても不定期ROM化してる。
992 名前:デフォルトの名無しさん [2016/11/02(水) 20:04:49.63 ID:uE83Sw4M.net] 起動*.bas (Gr03.bas)で存在しないルーチン名 Declare Function Beep03SC_CommonStringSet(ByVal hWin As HWND) As long を定義して IAA = Beep03SC_CommonStringSet(TakaHWND) と参照すると、 Gr03.o:fake:(.text+0x42): undefined reference to `BEEP03SC_COMMONSTRINGSET@4' と、存在しないサブルーチンを参照しているとの警告メッセージ゜が出る。 リンカーメッセージだと思うが、ルーチン名が大文字になっているので気が付きにくい。
993 名前:デフォルトの名無しさん [2016/11/08(火) 21:40:52.96 ID:johYCdoD.net] IAA = DispGRPinsideMove00(1, WidthDisp1, HeighDisp1, WidthPoint1, HeightPoint1) の末尾に as Long をつけて IAA = DispGRPinsideMove00(1, WidthDisp1, HeighDisp1, WidthPoint1, HeightPoint1) as Long と、末尾に修飾語をつけた場合のエラー 'File04.bas(77) error 3: Expected End-of-Line, found 'as' in 'IAA = DispGRPinsideMove00(1, WidthDisp1, HeighDisp1, WidthPoint1, HeightPoint1) as Long' が発生する。 👀 Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
994 名前:デフォルトの名無しさん [2016/11/11(金) 00:12:50.40 ID:U4vU37r5.net] ミキサー関係がさっぱりわからないので、他をいじり始めた。 Function (適当)(ByRef (適当な配列) as Long) as long とやったらばエラーになった。 ルーチン内で数値を定義して返す変数を 一律 ByRef とする
995 名前:アとは問題がある模様。 'C:\FbEdit\Projects\Samples\FindFile\FindFile.Bas をちょっといじったらば、じばけするようになった。原因の特定ができていない。 File04.rc タブをクリック、IDD_DIALOg をクリック、IDC_LiST1をクリック 一番上の行の、資源をクリック、言語をクリック 表示されたLanguage に JANG_Japanese を選択 Sub langauage を未指定 で緑の▼をクリック C:\tool\FreeBASIC\fbc -s gui "File04.bas" "File04.rc" Error! Line 13 of Resource Script (File04.RC):- Sub language cannot be higher than 3Fh:- 1 OBJ file not made Make done とエラーメッセージが発生する。 どこか間違えて、ファイルを配置している模様。 [] [ここ壊れてます]
996 名前:渡辺真 [2016/11/11(金) 20:54:50.64 ID:AOIhEjGq.net] >>917 >'C:\FbEdit\Projects\Samples\FindFile\FindFile.Bas >をちょっといじったらば、じばけするようになった。 コメントを日本語にしてみました。 makoto-watanabe.main.jp/freebasic/tipsFindFile.html お試し下さい。
997 名前:デフォルトの名無しさん [2016/11/12(土) 15:52:56.30 ID:fBKZn4cJ.net] >>917 のつづき。 ディレクトリーボックス(だったかな)を作るべく、 IDC_TRV1 SysTreeView32 をFile01.rc に導入。 さて、値を定義しようとして、c:\FbEdit\*.rc, C:\Tool\FreeBASIC\*.rc で、IDC_TRV1 や SysTreeView32 を検索したが見つからず。 search.yahoo.co.jp/search?p=SysTreeView32+OR+IDC_TRV+OR+TREEVIEW&aq=-1&oq=&ei=UTF-8&fr=top_ga1_sa&fl=0&x=wrt てもそれらしきものは見つからず。 ファイル(ディレクトリー)選択ルーチンをどうしようかなというところ。
998 名前:デフォルトの名無しさん [2016/11/13(日) 23:54:50.63 ID:qSS9FuJA.net] >>918 複写修正した内容を全破棄、再度作り直して 全角文字も表示できるディレクトリー一覧が作成できました。 現在、 特定のディレクトリーに限って表示する 中止ルーチンの削除(変数 hThread の排除) 親ディレクトりーの表示と移動 子ディレクトりーの表示と作成 選択ディレクトりー内のファイル作成 チルドレン(子プロセス)で参照できるようなライブ化 に向けて作業中。
999 名前:デフォルトの名無しさん mailto:sage [2016/11/14(月) 21:35:11.21 ID:A2iFoZHP.net] QBASICに PEEK POKEとマシン語呼び出しできる 機能はありますか?
1000 名前:デフォルトの名無しさん [2016/11/14(月) 23:03:05.89 ID:eAKgqUSA.net] >>921 あったことは覚えているが、 制御を移す(ES:等の状態からQB使用値を取得する)方法がわからず 機械語の参照をしなかった。*.COMファイルをQBで作成(ハンドアセンブル)して Autoexec.batやConfig.sys をQBで書き換えて、ドライバーとして登録して、Boot させて使っていた。 だから、答えられない。
1001 名前:デフォルトの名無しさん mailto:sage [2016/11/16(水) 13:11:13.73 ID:d7D9Ori4.net] >>922 ESて何?
1002 名前:デフォルトの名無しさん [2016/11/16(水) 22:27:19.99 ID:rTqrc2OY.net] >>923 ken-crate.blue.coocan.jp/asm/8086r.htm ES エクストラセグメント・レジスター 説明:DSの補助的なセグメント DefSig(だったかな)でPEEK, POKEの対象セグメントレジスタを定義する。 通常は、 固定配置の文字列のセグメントとアドレスを指定し、POKEで命令を書き込む。 (命令忘却)で制御を移す。 「文字列のセグメントとアドレス」の取得方法がわからなかった。 また、CS:IP の指定方法もわからなかった。 そこで、Config.Sys にドライバーを定義して、マウス割り込みのInt (16?, 33?忘却)により道のルーチンをつけて、 機械語ルーチンが実行されるようにした。 PEEK でInt のアドレスが読み取れるので、ドライバーのアドレスもわかり
1003 名前:、制御可能になった。 1秒を下回る時間経過を取得するだけしか使わなかった。 1秒単位の時間は、TIME命令で取得可能なのでこちらを使っていた。 [] [ここ壊れてます]
1004 名前:デフォルトの名無しさん [2016/11/17(木) 20:18:54.48 ID:PRY0yNKF.net] FreeBasic では、ちょっと手の込んだ論理演算をすると警告メッセージが出る。 DBool =((wfd.dwFileAttributes And FILE_ATTRIBUTE_READONLY) >0) EBool = (Mid$(ComFileAttributeString, 32, 1) = "1") DBool = ((wfd.dwFileAttributes And FILE_ATTRIBUTE_READONLY) >0) And (Mid$(ComFileAttributeString, 32, 1) = "1") DBool = DBool Or (((wfd.dwFileAttributes And FILE_ATTRIBUTE_READONLY) >0) And (Mid$(ComFileAttributeString, 32, 1) = "1")) File01.bas(286) warning 38(0): Mixing operand data types may have undefined results
1005 名前:デフォルトの名無しさん mailto:sage [2016/11/17(木) 21:28:16.84 ID:oM0V2Zu8.net] >>925 演算子のオペランドがboolean型と整数型をミックスしているからだよ boolean型同士の演算のみ、boolean型が返る それ以外は整数型が返る(-1:true, 0:false) >Mixing operand data types may have undefined results 複数のデータ型のオペランドの混同において、未定義の結果になる場合がある って警告を出してくれている >論理演算 気になるなら、オペランドの型をキャストして揃えればよい
1006 名前:デフォルトの名無しさん [2016/11/19(土) 17:32:14.27 ID:7lQvEpwE.net] >>926 前半の意味が分からなかった。 後半はなんとか。 www.sophia-it.com/content/%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88 DBool = (((wfd.dwFileAttributes And FILE_ATTRIBUTE_READONLY) >0) and (Mid$(ComFileAttributeString, 32, 1) = "1")) ABool = ABool or DBool: DBool = (((wfd.dwFileAttributes And FILE_ATTRIBUTE_HIDDEN)>0) and (Mid$(ComFileAttributeString, 31, 1) = "1")) (以下略) なんて調子に変更した。 マルチモジュール対応の便利機能を発見。 適当なBasかBIファイルを FbEdit で編集状態にして プロジェクト(p) Insert Selected as #Include とクリックすると、編集画面の位置に#Include命令の一文が挿入される。 ライブラリーとして、 D:\bas\Projects\Kako02\Mod\Taka01b.bas を使うときに Taka01b.bas 内で #Include "TakaCom1.bi" とやると、D:\bas\Projects\Kako02\Mod\TakaCom1.bi を読み取る。
1007 名前:デフォルトの名無しさん [2016/11/19(土) 18:00:48.90 ID:7lQvEpwE.net] FbEdit で上から4行目に表示されるファイル名をクリックして 離さずに、左右に動かすと、ファイルの表示の順番が入れ替えられる。 マルチモジュールにすると、分類の仕方にもよるが、10-20個のファイルを ライブラリーや共通ルーチンとして使用する。 編集が済んだからと言って、外してしまうとルーチンが見つかりません、とリンカーと思われるメッセージが現れるので外せない。 右端の見えない位置に山積にしてしまうという、手法が使えるようになる。
1008 名前:デフォルトの名無しさん [2016/11/19(土) 20:30:39.66 ID:T/wP/yiF.net] 数年プログラミング言語やって気づいたことは、 ソースコードのほとんどは「覚えゲー」でしかない。 特にJava系はそう、自分のアイデアはなくひたすらきめまりきった ものを書くだけだ。 その中で唯一頭を使って自分のオリジナリティを発揮できる 領域がある。 if() while() の () の中だ、for()があるのにwhile()も あるのはこのためだ。 これはLinuxソースとか解読してるとガチ。 あと、いきなりプログラミング言語で何かしら作ろうとしても 思いのほかつまらない、其れよりはVim とかEmac
1009 名前:sをまず練習 する、 あとWikipediaエディタで、コードで複雑な数学のの書き方を覚える、 一見回りくどいようだがやってみればわかるけどこれがガチで面白い。 [] [ここ壊れてます]
1010 名前:デフォルトの名無しさん [2016/11/20(日) 09:04:57.11 ID:M6Gp69qv.net] >>920 のつづき。 中止ルーチンの削除(変数 hThread の排除) に成功した。されど、初期設定ルーチンが成功していない。
1011 名前:デフォルトの名無しさん [2016/11/20(日) 09:43:18.27 ID:M6Gp69qv.net] >>929 最近の言語はライブ化が進んでいるからそんなところかな。 16ビット整数演算までのライブで、16ピット超えの整数を取り扱う方法の宿題を出したらば ライブに登録がなくできません 32ビット ライブを使って簡単にできるのになぜこんなことを要求するのか と、出題の間違いを指摘する回答が目立った なんて、話を何かで読んだ。 主題の意図は、論理変数の配列を使って無限な倍精度演算ルーチンを作れという内容なんだけど。 整数演算は比較的簡単に作れるけど、三角関数以上になると有効桁が取れなくて苦労する。 8087系を超える有効桁を求めるとかなりきつくなる。
1012 名前:デフォルトの名無しさん [2016/11/20(日) 09:44:02.32 ID:M6Gp69qv.net] Vim たぶん https://ja.wikipedia.org/wiki/Vim Emacs たぶん https://ja.wikipedia.org/wiki/Emacs Wikipediaエディタ たぶん https://ja.wikipedia.org/wiki/Wikipedia:%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%83%BC だろうけど、わたししゃ使いこなせないだろうな。 今はサクラ https://ja.wikipedia.org/wiki/%E3%82%B5%E3%82%AF%E3%83%A9%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF を使っているけど、使ったことがないメニューが半分を超える。 MSのEDLINE https://ja.wikipedia.org/wiki/EDLIN や https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E5%B8%B3 がつかものにならなくて、自前で作ったけど低性能。 結局、いろいろ試して、物理制限がほとんどないサクラに落ち着いた。 フォートラン用のラインエディタ EDI.PG のサブセットぐらいの機能しか使っていない。 変な癖のある目倉うち、正規の https://ja.wikipedia.org/wiki/%E3%82%BF%E3%83%83%E3%83%81%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0 ではなく(指がぶつかる・指が短くて届かない)、右手又は左手で書籍や紙をなぞりながら、反対側の片手だけを使って(キーボートの角に小指が親指をひっかけてホームポジションとする)、キーボートやディスプレイを見ないで ひたすら紙だけを見ながら打ち込む方法で、この年まで乗り切ってしまった。 小脳や運動前野の学習が成立したら、簡単には打ち方を変えられないから、最初のエディタの選択には十分注意すること。 この使い方を一生背負ってゆくことになるから。
1013 名前:デフォルトの名無しさん mailto:sage [2016/11/20(日) 14:06:06.88 ID:4zKqcZHF.net] 当時流行したBASICはFORNEXTであっても複数文に 及んで機能していたわけではなく、それぞれ独立して機能していた FORに対するNEXTではないというエラーメッセージがあるのが その証拠である。 C言語のような括弧書きで複数行を纏める言語になってから BASICはBASICではなくなっている。
1014 名前:デフォルトの名無しさん [2016/11/20(日) 23:01:51.93 ID:en+u1OOF.net] www.dotup.org/uploda/www.dotup.org1068514.txt.html 現在使っている数値処理関係のリンク集です。 数学の話題が出たから、UPします。 現在はわかりませんが、かってはLISPの信者って結構いました。 https://ja.wikipedia.org/wiki/LISP かってはLISPだけだったのです。無限倍精度演算が可能な言語は。 もし、数処理にあきたら、使える言語で無限倍精度演算に挑戦してみてください。 1学年後輩、3年先に卒業した人ですが、MS-DOSの機械語で無限倍精度演算に挑戦した人がいました。 原因は、 デカコンを使って計算していたら、4日たっても終了せず、5日目の朝に終了しました。 またされた情報処理関係教授に暴行を受けました。 それて、他学科のMS-DOS機(WinよりもUnixよりもはるかに速い)を借りて、無限倍精度演算を行いました。 リンク集には、類似の問題の解説が含まれています。
1015 名前:デフォルトの名無しさん [2016/11/20(日) 23:10:37.92 ID:en+u1OOF.net] 狂気の2桁2乗計算法 13*13 = (3*3) + 2 * (3 * 10) + 10 * 10 = 9 + 60 + 100 = 169 という(X + Y) * (X + Y) = (略) となる、中学校か高校で習う公式を使った計算方法。 これを手計算で使うと、狂人認定となる。 sssp://o.8ch.net/jcf7.png
1016 名前:渡辺真 [2016/11/21(月) 00:30:17.07 ID:hydzNU9U.net] >>934 >使える言語で無限倍精度演算に挑戦してみてください。 FreeBASIC では、任意精度計算ライブラリ(GMP)を使えます。 makoto-watanabe.main.jp/freebasic/ExtLibgmp.html
1017 名前:デフォルトの名無しさん [2016/11/21(月) 20:14:32.82 ID:o66uhtT9.net] >>936 ライブ化が進んでいる。 80?87を使わないで、80?87を超える有効桁が取れる環境であってほしい。 今は、FreeBasic の雰囲気をつかむ、無茶な操作法を見つけ出す、ことで手一杯なので、そっちまで手が回らないけど 30番系統、30-36番のライブラリーが、無限倍精度のライブなので、これを廃止できるかもしれない。 >>920 の チルドレン(子プロセス)で参照できるようなライブ化 の一つとして、 Xクリック終了を、異常停止。Button クリック終了を正常停止。 とするための「Button クリック終了」ルーチンが組めた。 詳しくは、 eternalwindows.jp/winbase/window/window05.html 参照。 Case IDC_BTN4 'MessageBox(TakaHWND, "Hello 終了処理", "Messagebox caption", MB_ICONINFORMATION) 'declare function PostMessageA(byval hWnd as HWND, byval Msg as UINT, byval wParam as WPARAM, byval lParam as LPARAM) as WINBOOL MSReturnCode = PostMessage(hwnd, WM_CLOSE, 0, 0) return 0
1018 名前:デフォルトの名無しさん [2016/11/22(火) 20:29:45.11 ID:y8LZzMie.net] >>936 をみたら、三角関数などを求めるルーチンがないので、ヒントだけ https://ja.wikipedia.org/wiki/%E3%83%86%E3%82%A4%E3%83%A9%E3%83%BC%E5%B1%95%E9%96%8B 1.マクローリン展開(テーラー展開の特異解?、高校の工業数学の教書には乗っていたはずmathtrain.jp/maclaurin )して、関数を級数に置き換える。 2.級数を計算する。 有効桁に注意 www.nagaoka-ct.ac.jp/~araki/s/sisoku.html たしか、この前やった時には、COS()が不安定で泣いた。 7.2桁(単精度実数)で、50項から100項まで計算しないと誤差がひどい。 高速化するならば、近似解(ニュートン法)等いろいろある。 http: // ayapin-film . sakura . ne . jp /LJ/Docs/27th.pdf 愛用の方法は jr4pdp.blog.enjoy.jp/myblog/picmicom/ 三角関数は時間がかかると思われますので、sin()の0度から90度までを予め、PCで計算し、その結果を10000倍した数値を整数として、配列に記憶させ、sin(deg)はそのまま取り出し、cos(deg)はsin(90-deg)で取り出す事にしました。 とあるように、 計算値をファイルに保存しておいて、ファイルから値を読みだす という方法。電卓並みの速度(1秒以下)が得られる。
1019 名前:デフォルトの名無しさん [2016/11/22(火) 23:55:18.03 ID:W05eTR51.net] 『電子計算機のための数値
1020 名前:計算法III』(「数理科学シリーズ 5」、培風館、1970) には、三角関数に関する近似式がいろいろと掲載されています。 その中で、テイラー展開によるsinとcosの計算法があり、 ただ、三角関数の周期性を利用して|x|<π/2の範囲で計算すると 精度もよく、計算も速いと書いてあります。 それ以外に、最良多項式近似式も出ています。 いまでは、入手が難しいかもしれませんが、数値計算用サブルーチンを 作りたい人は一読の価値があるでしょう。 [] [ここ壊れてます]
1021 名前:デフォルトの名無しさん [2016/11/23(水) 22:19:02.11 ID:V77GbOhM.net] >>939 この本の話は、学生時代から聞いていて、何回か入手を試みたがすべて失敗。 一番近くの図書館が都内というありさま。 高校の副読本(線形代数・微積方程式等)ですら、公立図書館にはおいていない。
1022 名前:デフォルトの名無しさん [2016/11/23(水) 22:37:15.00 ID:V77GbOhM.net] >>933 QBがらみで思い出したけど For-Next ループ内で、Goto 先をNext の行番号にすると、おかしなことが発生したような記憶がある。 Nextで複数のループ変数をまとめないで、 一つのループ変数に対して一つのNext文を 拡張Doループは、GosubかCallか数値関数のみ IF等を使って、あるいは、マルチステートのNext は暴走しやすいので、Nextは先頭に なんてやっていた。
1023 名前:デフォルトの名無しさん [2016/11/23(水) 23:54:37.72 ID:qZZB3vTy.net] >>929 全国の公立図書館は、お互いに本の貸し借りをする協定を結んでいますので、 お近くの公立図書館にない場合は、リクエストすると取り寄せてもらうことが 可能です。 もし都立中央図書館にあるならば、リクエストする際に都立中央図書館にありますと 伝えるといいでしょう。 国会図書館は全国の公立図書館に貸し出してくれますが、ただその場合 取り寄せてくれた図書館内での閲覧のみ、コピーは可能ですので、 借り出すことはできません。
1024 名前:デフォルトの名無しさん [2016/11/23(水) 23:57:30.39 ID:qZZB3vTy.net] >>931 ねんの為に「日本の古本屋」で検索したら、3巻揃いが妥当な値段で出品されていました
1025 名前:渡辺真 [2016/11/25(金) 23:28:20.51 ID:tPNxGDnY.net] >>938 >936 をみたら、三角関数などを求めるルーチンがない 本家の掲示板にプログラム例がありました。 www.freebasic.net/forum/viewtopic.php?t=23225 「new header file GMP」の2つめのコメント by dodicat ≫ Jan 17, 2015 1:11 の中にあるプログラムです。
1026 名前:デフォルトの名無しさん [2016/11/27(日) 01:33:25.35 ID:xONUe7m9.net] >>920 の 選択ディレクトりー内のファイル作成 チルドレン(子プロセス)で参照できるようなライブ化 の2点を除いて、作成終了。たぶん。 1-2回試しただけなので、本格的バグ取りはしていない。 リストボックスの特定の項目を「選択」にしていするには Astring = left$(szDefPath, 1) nInx = instr(ComDevString, Astring) - 1 IF (nInx < 0) then nInx = -1 SendDlgItemMessage(hWin, IDC_LST3, LB_SETCURSEL, nInx, Cast(LPARAM, @buff)): '単項目だけ選択可能なときに特定の項目を選択する な調子で。「 Cast(LPARAM, @buff)」は何かあるかもしれないので、つけた。意味などはわからない。 V.B.のドライブボックス相当は作れた。 ComDevString(以下ではiDevString)の定義は、 iDevString = "" For IAA = Asc("A") to ASC("Z") DevString = chr$(IAA) + ":\" IBB = getVolInfo(DevString, VSNoString, FlStmString, MaxPathLenLong, DevTypeLong) IF (MaxPathLenLong = 0) then 'ドライブが存在しない Elseif (DevTypeLong = 0) and (ActionType = 2)Then else iDevString = iDevString + chr$(IAA) End if Next IAA な調子で収集。
1027 名前:デフォルトの名無しさん [2016/11/27(日) 01:42:35.88 ID:xONUe7m9.net] Public Function getVolInfo(DevString As String, ByRef VSNoString As String, ByRef FlStmString As String, ByRef MaxPathLenLong As Long, ByRef DevTypeLong As Long) As Long Const TakaSubRoutineNo as long = 3& '*-* ボリウムシリアルナンバーとファイルシステムを取得する 'VSNoString (出)ボリウムシリアルNo 'FlStmString (出)ファイルシステム名 'MaxPathLenLong (出)最大パス長さ, 0;障害 'DevTypeLong (出) 0;(障害), 1;交換可能ディスク(FD/MOなど), 2;固定ディスク, 3;リモート or ネットワークドライブ, 4;CD_ROMドライブ, 5;RAMディスク, (他);未定義} 'Const MAX_PATH& = 260 Const FileSystemNameBufferLenULng As ULong = 32& Dim RootPathNameString As String 'ルートディレクトリ Dim strVolumeNameBuffer As String * MAX_PATH = space$(MAX_PATH) 'ボリューム名バッファ Dim VolumeSerialNumberULng As ULong 'ボリュームのシリアル番号 Dim MaximumComponentLengthULng As ULong 'ファイル名の最大の長さ Dim lngFileSystemFlagsULong As ULong 'ファイルシステムのオプション Dim FileSystemNameBufferString As String * FileSystemNameBufferLenULng = space$(FileSystemNameBufferLenULng) 'ファイルシステム名を格納するバッファ Dim As Long IErrorLong Dim As String AAString
1028 名前:デフォルトの名無しさん [2016/11/27(日) 01:46:06.53 ID:xONUe7m9.net] TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo) getVolInfo = 0 RootPathNameString = Left$(DevString, 2) & "\" + Chr$(&H00) AAString = "" IF (Mid(RootPathNameString, 2,1) <> ":") then AAString = AAString & "(" & RootPathNameString & ")" & "デバイスの指定がありません。" else IErrorLong = GetVolumeInformation(RootPathNameString, strVolumeNameBuffer, MAX_PATH, @VolumeSerialNumberULng, @MaximumComponentLengthULng, @lngFileSystemFlagsULong, FileSystemNameBufferString, FileSystemNameBufferLenULng) IF (IErrorLong = 0) then '障害発生 end if If (lngFileSystemFlagsULong) Then '(2005.09.05 済) Sub getVolInfo() ボリウムシリアルNoを4桁から8桁に変更 VSNoString = NHexStringUL(VolumeSerialNumberULng, 8): 'ボリウムシリアルNo FlStmString = NulCatString(FileSystemNameBufferString): 'ファイルシステム名 MaxPathLenLong = MaximumComponentLengthULng: '最大パス長さ If (lngFileSystemFlagsULong And FS_CASE_IS_PRESERVED) Then AAString = AAString & "ファイル名大文字小文字維持" If (lngFileSystemFlagsULong And FS_CASE_SENSITIVE) Then AAString = AAString & "ファイル名大文字小文字区別" (中略、こんな調子で、属性フラグを作成しているのだが、ロボットチェックに引っかかってかけないんだわ)
1029 名前:デフォルトの名無しさん [2016/11/27(日) 01:47:29.12 ID:xONUe7m9.net] If (lngFileSystemFlagsULong And FILE_SUPPORTS_SPARSE_FILES) Then AAString = AAString & "スパースファイル" If (lngFileSystemFlagsULong And FILE_VOLUME_QUOTAS) Then AAString = AAString & "ディスククォータ" Else ' エラーを表示 AAString = AAString & "(" & RootPathNameString & ")" & "属性は取得できません。" VSNoString = "" FlStmString = "" MaxPathLenLong = 0&: '(2008.05.30 済) Sub getVolInfo() 障害時に0を返すように変更 EndIf EndIf IF (Mid(RootPathNameString, 2,1) <> ":") then IErrorLong = 0 else 'declare function GetDriveTypeA(byval lpRootPathName as LPCSTR) as UINT IErrorLong = GetDriveType(RootPathNameString) EndIf DevTypeLong = IErrorLong - 1& If (DevTypeLong < 0&) Then DevTypeLong = 0& End Function
1030 名前:デフォルトの名無しさん [2016/11/27(日) 11:56:15.91 ID:lZFUoVdV.net] >>944 Function equals overload(a As mpf_t,b As mpf_t) As Integer のように、型「mpf_t」をどこかで定義している模様。手持ちのFreeBasic 関係ファイルには未発見。 検索では、 math-www.uni-paderborn.de/~aggathen/vorl/2004ws/sem/markus-steinborn.pdf#search=%27Type+mpf_t+gmp.bi%27 www-it.sci.waseda.ac.jp/teachers/w405201/CPR2/cprogram15.pdf#search=%27mpf_t+gmp.bi%27 がヒット。 前者はドイツ語なので、英語よりも理解できない
1031 名前:度の語学力なので詳細不明。 後者は日本語ですが、C言語の解説です。記載頁64, アクロバット67頁右段に >任意精度の整数・有理数・実数をサポートしています.実数型はmpf_tと宣言します. とあり、BIファイルを見つけてFreeBasic用に変換しないと使えないでしょう。 >この不正確さを払拭するには,エネルギー保存が満たされるような常微分方程式の解法アルゴリズムを採用するといった手段が王道とされています.がしかし,精度を100桁くらいに増やして計算してみるといった力技も捨てがたい魅力があります. とあるように、 数学や物理を専門としない人(数学を専門としない人々)にとっては、力技に頼るしかない。 数学なんて、難しくてわからないから、多倍精度演算で、小中学校で学ぶ範囲の数処理を使って、えぃ!ゃー!、とやる方法です。 [] [ここ壊れてます]
1032 名前:渡辺真 [2016/11/27(日) 21:40:18.83 ID:22yXElOy.net] >>938 >936 をみたら、三角関数などを求めるルーチンがない 日本語訳を追加しました。 makoto-watanabe.main.jp/freebasic/tipsGmpFunctions.html 翻訳していて、内容のすごさに感激しました。
1033 名前:デフォルトの名無しさん [2016/11/29(火) 21:43:47.63 ID:MxHdA4L3.net] >>920 の 選択ディレクトりー内のファイル作成 が作成終了。 残るは、ライブ化。 >>950 中身を試してみることはやっていませんが、 LISPでコケるのが、多倍精度演算ルーチンの作成で、多くの人々が数値計算から去ってゆきます。 >採用するといった手段が王道 なんてことは、デカコンがいくらでも使える人々ならやっているわけで 素人同然の学部生ができないのです。 一部の人間だけが独占して、てかい面している(暴行すらも許される)世界です。 高卒程度のズブのド素人が、数値計算の世界に手を突っ込めるということは、素晴らしいことです。 母校の情報処理関係学科の定員は45名、卒業生は1桁。30名以上が毎年中退してします。 同級生の奥様も、役人やっている通称お姉さまも、結局中退しました。 数値処理の世界を多くの人々に広げられれば良いですね。
1034 名前:デフォルトの名無しさん [2016/12/01(木) 21:57:52.24 ID:FgpY/gwj.net] コマンド行、実行形式のファイル名の後に付ける修飾語、コマンドラインについてなんだけど makoto-watanabe.main.jp/freebasic/PgCommand.html スイッチ命名法が慣れ親しんだ 360とは異なる。 360 では、 / スイッチの先頭を示す記号で、その後スイッチがついて、修飾語が必要な場合には:て゛区切って、空白で終わる。 /Switch:9999 スイッチの前に目的語が付く。 たとえば、実行形式のTARA.PG を起動するときに Tara.PG /PI:20 と優先度20で実行する。 末尾指定のスイッチ。 FreeBasic では、 -x foobar.exe -m baz foo.bas bar.bas baz.bas と先頭指定なんだよ。 スイッチの解釈ルーチンをどうしよう?。 なれていないから、スイッチの文法がよくわからぬ。 コンパイルのコマンド行は、多分作成できない。 FbEditでも、スイッチの指定をいじるとまともにコンパイルされない。
1035 名前:デフォルトの名無しさん [2016/12/01(木) 22:40:35.97 ID:FgpY/gwj.net] >>952 でスイッチの解釈が問題になった理由 pepper.is.sci.toho-u.ac.jp/index.php?plugin=attach&refer=%BB%B3%C6%E2%A4%CE%BC%F8%B6%C8%A4%CE%A5%DA%A1%BC%A5%B8%2F11%BD%A9%2F%A5%AA%A5%DA%A5%EC%A1%BC%A5%C6%A5%A3%A5%F3%A5%B0%A5%B7%A5%B9%A5%C6%A5%E0&openfile=ss_04.pdf #search=%27%E8%B3%87%E6%BA%90+%E5%8D%A0%E6%9C%89+%E8%A7%A3%E6%94%BE%27 がわかりやすいかな? ファイル選択ルーチンをライブ化すると、複数のタスクから要求が来るわけで、 一つのタスクが終了するまで、他のタスクからの要求を排除しなければならない。 File01.exe がファイル選択ライブで、 作業指示ファイル File01.ini に処理の詳細を記載して、File01.exeを子プロセスとして起動する。 File01.ini のフラグを見て、使っていないのであれば使用する、とするフラグを立てて、実行する。 FreeBasic では、子プロセスが終了するまで待ち状態になる起動方法がサポートされているので、タスクの切り替えはシステム任せとなる。 ユーザーである File01.exe が起動されたときに、 非特権ユーザーからの起動では、ファイルを選択して終了、だけで済むのだが 特権ユーザーからの起動では、ファイルを選択するという作業をしないで、待ち状態の管理をしなければならない。 「待ち状態」の管理、つまり、 File01.ini の全削除 File01.ini の占有情報の破棄 File01.ini の異常値(他のユーザー(タスク)に開放するから、異常値を指定される場合もありうる)の修正 あたりをしなければならない。 特権で起動されたのか、一般として起動されたのか、を区別するために、スイッチが必要になってくる。 スイッチを昔ながらの360方式(すでに作成済み、変数名を修正したら動いたライブに入っている)を使うか、 FreeBasic 方式に合わせたスイッチを指定するようにするのか が今迷っている内容。
1036 名前:デフォルトの名無しさん [2016/12/01(木) 23:46:44.16 ID:FgpY/gwj.net] >>950 gmp 6.1.0(gmp-6.1.0.7z) ?? かな https://www.mediafire.com/?5y8d3rqwyx32ocv users.freebasic-portal.de/frisian/GMP/gmp.7z 内に入っていた ReadMe.txt の日本語解読。 gmp.h.org The orignal .h file produced by GCC GCCが作成した本来の.hファイル gmp.h The edited .h file that was used for FBfrog FBfrogが使用可能になるように編集した.hファイル (「FBfrog」は、FreeBasic 関係の何かのソフトっぽい。) Online code was removed since it will not work in FreeBasic FreeBasicでは動作しないため、オンラインコードが削除されました gmp.bi.fbfrog The .bi file produced by FBfrog from gmp.h gmp.hからFBfrogによって生成された.biファイル gmp.bi The final file with some alterations and additions 複数の変更や追加を経た最終ファイル libgmp.a Static libary file of GMP build with: --disable-shared --build=i486-pc-mingw32 「--disable-shared --build=i486-pc-mingw32」を使ってビルドされたGMP静的ライブラリファイル Passed all checks すべての検査が終了した。
1037 名前:デフォルトの名無しさん [2016/12/01(木) 23:48:07.06 ID:FgpY/gwj.net] >>954 のつづき。 Make tuneup failed (complaints about missing file) 調整には失敗した(不足しているファイルについての問題)。 test_gmp.bas A (sort of) program I made to test the new header file, don't take it to serious. 新しいヘッダファイルをテストするために作った(ある種の)プログラム。 複雑にしないでください。 D:\FreeBASIC-1.00.0-win32 +--bin +--doc +--inc <== bmp.bi needs to go here (rename or save the old gmp.bi file if you want to preserve it). bmp.bi はここの保存する必要がある(古いファイルを保存したい場合には、名前を変更するか他の場所に保存する)。 \--lib \--win32 <== libgmp.a needs to go here (if you have installed a libgmp.a by yourself rename/
1038 名前:save the old one). libgmp.a はここの保存する必要がある(libgmp.a を使用したい場合には、名前を変更するか他の場所に保存する)。 The gmp.bi file need two files to work properly, long.bi and stddef.bi. gmp.biファイルが正しく動作するために2つのファイル、long.bi と stddef.biが必要です。 [] [ここ壊れてます]
1039 名前:デフォルトの名無しさん [2016/12/02(金) 00:11:55.45 ID:loKG2Fku.net] ちょっと前に話題にした、INI ファイル関係。 キーを削除する場合 IErrorRetCodeLong = WritePrivateProfileString(SecNameString, KeyNameString, 0, FileString) セクションを削除する場合 IErrorRetCodeLong = WritePrivateProfileString(SecNameString, 0, 0, FileString) Visual Basic では、VBnul という定数を指定していた。ヌル "" を指定すると削除されず 「なんたら=」とか「=」が保存された。即値の0を指定する必要がある。 IErrorRetCodeLong = GetPrivateProfileSection(SecNameString, strValue, StrLength, FileString) IErrorRetCodeLong = GetPrivateProfileSectionNames(strValue, StrLength, FileString) のような&h00区切り文字列の場合は、分離するサブルーチンを作成せず、読み取った直後に分離するようにした。 読み取りルーチンは、引数の種類で分けて、16種類になってしまった。 うまく書き込みがされているかどうかは試験していないもの(String 以外の型の文字変数)もある。
1040 名前:デフォルトの名無しさん [2016/12/03(土) 12:38:01.18 ID:HN6NcG00.net] makoto-watanabe.main.jp/freebasic/PgOpen.html ock_type ディスク・ファイルに、他の処理(スレッドやプログラム)からアクセスするときの制限を課します。下記のいずれかを使います。 Shared (ファイルは、他の処理から自由ににアクセスできます。) Lock [Read] [Write] (読み書き両方について、他の処理からのアクセスを否定することができます。) タスクの重複起動を禁止するために 実行形式ファイル DimChk16.exe を占有することを模索。 書き込みのみを禁止する方法は発見できたが、読み取りを禁止する方法は発見できず File = Exepath + "\AAA.txt" FileNoLong = FreeFile 'Open File For Input Lock Read Write As #FileNoLong (読み書き可能) 'Open File For Input Lock Read As #FileNoLong (読み書き可能) 'Open File For Input Lock As #FileNoLong (読み書き可能) 'Open File For Input, Read As #FileNoLong (エラー) 'Open File For Input Read As #FileNoLong (エラー) 'Open File For Input, Lock Read As #FileNoLong (エラー) 'Open File For Binary As #FileNoLong: '他タスクによる書き込みだけ禁止 'Open File For Binary Shared As #FileNoLong: '他タスクによる書き込みだけ禁止 Open File For Binary Lock As #FileNoLong: '他タスクによる書き込みだけ禁止 MessageBox(TakaHWND,"Hello ","Messagebox caption",MB_ICONINFORMATION) Close #FileNoLong MessageBox()でタスクを止めておいて、エクスプローラーから、メモ帳を使って、File をOPEN, 読み取って、編集して、書き込む、という方法で検査。 If (App.PrevInstance) Then に変わる手法を探している。 'microsoft.public.jp.access.narkive.com/VGCEWUUt が理解できた方法だが、よくわからないので、INIファイルを使う方法を検討中 起動直後にRename する方法もあるが、分割LOADをWinが使っていた場合に、絶望的な状況に陥りやすい。
1041 名前:デフォルトの名無しさん [2016/12/03(土) 22:43:19.48 ID:HN6NcG00.net] >>957 のつづき。INIファイルを使った重複起動の抑制ルーチン 参照側 Function WndProc() 内。 BootCountとIAA はLOCALで宣言。 ' Case WM_INITDIALOG ' hWnd = hWin ' TakaHWND = hWin: '大域変数 ' IAA = DoubleBootStates(-1, BootCount) ' If (DoubleBootChick(BootCount)) Then ' '初回起動 ' IAA = taka01b_CommonStringSet(TakaHWND) ' IAA = Taka01H_CommonStringSet(TakaHWND) (等の起動処理、初期化など) ' Else ' '重複起動 → 終了処理 ' MessageBox(TakaHWND, "Hello 終了処理", "Messagebox caption", MB_ICONINFORMATION) ' MSReturnCode = PostMessage(hwnd, WM_CLOSE, 0, 0) ' return 0 ' End If ' Case WM_DESTROY ' IAA = DoubleBootStates(1, BootCount) ' PostQuitMessage(NULL) ' ' ' Case Else
1042 名前:デフォルトの名無しさん [2016/12/03(土) 22:44:41.89 ID:HN6NcG00.net] Public Function DoubleBootChick(ByRef BootCount as Long) as Bool Const TakaSubRoutineNo as long = 20& Dim As Long IAA 'Dim As String AppExeNameString (大域) TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo) If (CommonStringSetFi
1043 名前:g = 0) then IAA = Local_CommonStringSet(ReadActionType) 'Const DoubleBootSecName As String = "DoubleBoot" (大域) IAA = IniFileRead2(CtrlFile5String, DoubleBootSecName, AppExeNameString, BootCount) DoubleBootChick = (BootCount = 1) End Function [] [ここ壊れてます]
1044 名前:デフォルトの名無しさん [2016/12/03(土) 22:54:02.60 ID:HN6NcG00.net] Dim Shared CtrlFile5String As String: '重複起動検査用 Const IniNameString as String = "taka01b" Dim Shared AppExeNameString As String Private Function Local_CommonStringSet(ActionType as Integer) As long Const TakaSubRoutineNo as long = 2& 'このファイルを使用するときに初期化する必要がある内容 IF (CommonStringSetFig = 0) then CommonStringSetFig = 1 Local_CommonStringSet = 0 CtrlFile5String = Exepath + "\" + IniNameString + ".Txt" AppExeNameString = Right(Command( 0 ), Len(Command( 0 )) - InStrRev(Command( 0 ), "\")) CommonStringSetFig = 2 else Local_CommonStringSet = 1 end if End Function
1045 名前:デフォルトの名無しさん [2016/12/03(土) 22:55:18.26 ID:HN6NcG00.net] Public Function DoubleBootStates(ActionType as Integer, ByRef BootCount as Long) as Long Const TakaSubRoutineNo as long = 20& 'BootCount (出) Dim As Long IAA 'Dim As String AppExeNameString (大域) TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo) DoubleBootStates = 0 IF (CommonStringSetFig = 0) then IAA = Local_CommonStringSet(ReadActionType) 'Const DoubleBootSecName As String = "DoubleBoot" Select Case ActionType Case -1 '開始 IAA = IniFileRead2(CtrlFile5String, DoubleBootSecName, AppExeNameString, BootCount) BootCount = BootCount + 1 IAA = IniFileWrite(CtrlFile5String, DoubleBootSecName, AppExeNameString, str$(BootCount)) Case 0 '破棄 IAA = IniFileKeyDelete(CtrlFile5String, DoubleBootSecName, AppExeNameString) Case 1 '終了 IAA = IniFileRead2(CtrlFile5String, DoubleBootSecName, AppExeNameString, BootCount) BootCount = BootCount - 1 IAA = IniFileWrite(CtrlFile5String, DoubleBootSecName, AppExeNameString, str$(BootCount)) Case Else IAA = IniFileRead2(CtrlFile5String, DoubleBootSecName, AppExeNameString, BootCount) End select End Function
1046 名前:デフォルトの名無しさん [2016/12/03(土) 22:59:53.72 ID:HN6NcG00.net] Public Function IniFileWrite(FileString as String, SecNameString as String, KeyNameString as String, KeyValString as String) as long Const TakaSubRoutineNo as long = 20& Dim As Long IErrorRetCodeLong 'Win 2000 では、&H09が使用可能、Win98では不可 TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo) If (Len(FileString) = 0&) Or (Len(SecNameString) <= 0&) Or (Len(KeyNameString) = 0&) Or (Len(KeyValString) = 0&) Then IniFileWrite = 1 Else IErrorRetCodeLong = WritePrivateProfileString(SecNameString, KeyNameString, KeyValString, FileString) IniFileWrite = abs(sgn(IErrorRetCodeLong))-1 End If End Function Public Function IniFileRead2(FileString As String, SecNameString As String, KeyNameString As String, ByRef KeyValLong as Long) as Long Const TakaSubRoutineNo as long = 25& 'IniFileRead の倍精度整数用 Dim strValue As String * IniBuffSize: '1024 Dim as Long StrLength, IErrorRetCodeLong, IAA TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo) StrLength = Len(strValue) IniFileRead2 = 0 If (Len(FileString) = 0) Or (Len(SecNameString) <= 0) Or (Len(KeyNameString) <= 0) Then KeyValLong = 0& Else IErrorRetCodeLong = GetPrivateProfileString(SecNameString, KeyNameString, "", strValue, StrLength, FileString) KeyValLong = Val(strValue) End If End Function
1047 名前:デフォルトの名無しさん [2016/12/03(土) 23:03:27.50 ID:HN6NcG00.net] Public Function IniFileSecDelete(FileString As String, SecNameString As String) As Long Const TakaSubRoutineNo as long = 32& Dim As Long IErrorRetCodeLong TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo) IniFileSecDelete = 0 If (Len(FileString) = 0) Or (Len(SecNameString) <= 0) Then Else IErrorRetCodeLong = WritePrivateProfileString(SecNameString, 0, 0, FileString) End If End Function >>958-963 (たぶん) がINIファイルを使った重複起動禁止
1048 名前:デフォルトの名無しさん [2016/12/04(日) 12:12:45.27 ID:Dpp2DwtE.net] FreeBasic 型の「 -x foobar.exe -m baz foo.bas bar.bas baz.bas」のようなコマンドラインの解釈ルーチンが完成。 やってみたら、ユーザー依存が強い(スイッチに前置詞・後置詞があるかはユーザー側で判断)ので、 空白と「-」を区切り文字とする配列を作っただけ。 スイッチの解釈(スイッチと語句との分離)は、ユーサー任せで、ライブラリーは関与できない。 関与するとしたら、スイッチの後置詞をライブに登録する必要が出てくるから。 スイッチの後置詞内にスイッチを指定する、なんて処理は比較的容易に作れるだろう。 例 SPL 05/DV DK05/VL:trtrta をシスオペに指示する Mount 命令の場合には /を!に, :を; に書き換える必要がある。これやらないと、Mount命令のスイッチとして解釈してしまうから ナルト(アットマーク)処理、 makoto-watanabe.main.jp/freebasic/CompilerOptoptfile.html#start は、360とあまり違っていないので、360処理のライブにかぶせる予定だが 読んだ雰囲気では、解釈が一部違う。めんどくさいから、独自の文法による拡張命令にするか。 ライブでの処理は、今のところ考えていない。 というか、 @処理はバッチ処理のタスクの所轄なので、バッチ処理を考えていない今では、何も作れない。 システムを操作する必要も出てくるから。
1049 名前:デフォルトの名無しさん [2016/12/06(火) 23:36:17.80 ID:bNLFehP7.net] File01.rc を直接編集して、 #define IDC_LST1 1002 #define IDC_STC1 1004 以下の番号の順番をそろえてみた。表示画面がみだれて CONTROL "RBN1",IDC_RBN1,"Button",0x50010009,144,45,21,9 が単なるButton CONTROL "決定",IDC_
1050 名前:BTN4,"Button",0x50010000,153,24,30,15 のように描かれる。どうせ番号を間違えたのだろう、と今度は、 FBEdit のRCタグを使って、ID番号を変更。 横▽をクリックして、コンパイル。 ハングした。 今の技能では、ID番号をそろえるのは不可能であると判断した。 現在の、File01系統、ファイル選択ライブの作成で、全ディスクサイズで1MB、圧縮BAKファイルで100KB、位。 やっと終わりが見えてきた。 以前紹介した、アイコン作成ツール、使って作成に成功。 オハナシ゛ャー.ico、漢字で書くとお花茶屋.icoで、アイコン登録のつもりが コンパイラーか、FBEditか、わからないが、読み取れない。HanaJaya.icoで登録した。 Oが足らないって?、アルファベットのOは旧バージョンの意味で付ける接頭語なので使えない文字なんだわ。 登録の仕方は、http://www.hi-ho.ne.jp/makoto_watanabe/FbEdit/tut2.htm#start 参照。 [] [ここ壊れてます]
1051 名前:デフォルトの名無しさん [2016/12/08(木) 20:19:45.21 ID:fg85d7ok.net] ライブラリーの整理を始めた。名称の統一なんだけど。 その中で、起動表示枠の表題の取得と変更には失敗した。 Dim buff As Zstring * MAX_PATH ' GetDlgItemText(hWin, IDD_DIALOG, @buff, SizeOf(buff)) ' MessageBox(TakaHWND,"IDM_FILE_01" + Buff ,"Messagebox caption",MB_ICONINFORMATION) '取得できず 'buff = "てきとう" ' SetDlgItemText(hWin, IDD_DIALOG, @buff) '変更できず QBでは、たしか、使わない*.objには、ダミーの*.objをリンクさせて、容量を減らすという機能があった。 このスレでは、いろいろ話題になった、バグ取りルーチンのうち、エラー記録ルーチンを外す*.OBJを作ることとした。 Function文と名称に定義する行とEnd Function 行の3行にする。 手作業でなんてやったらば間違えるので、自動化した。 ついでに、Declare 文も一部自動作成するようにした。 大域参照するルーチンだけ自動作成にして、局所参照は今まで通り手作業で入れることとした。 今のところは、単にかき集めただけだが、他への流用を考えて、整列などをしなければならないだろう。
1052 名前:デフォルトの名無しさん [2016/12/10(土) 12:42:07.74 ID:K21NAgqS.net] ライブラリーの整理の都合で、タイムゾーン関係をいじり始めることになった。 msのサイトを見ても、よくわからないので、見つけた関数を試している。 Function TimeZonTest(ActonType As Integer) As Long 'Dim TakaTimeZon As DYNAMIC_TIME_ZONE_INFORMATION 'Dim TakaTimeZonPtr As PDYNAMIC_TIME_ZONE_INFORMATION Dim TakaTimeZon2 As _TIME_ZONE_INFORMATION Dim TakaTimeZon2Ptr As LPTIME_ZONE_INFORMATION Dim MsRetCode As DWORD 'TakaTimeZonPtr = @TakaTimeZon TakaTimeZon2Ptr = @TakaTimeZon2 TimeZonTest = 0 'MsRetCode = GetTimeZoneInformation(TakaTimeZon) 致命的エラー 'MsRetCode = GetTimeZoneInformation(@TakaTimeZon) 警告エラー 'MsRetCode = GetTimeZoneInformation(TakaTimeZonPtr) 警告エラー 'MsRetCode = GetTimeZoneInformation(TakaTimeZon2) 致命的エラー MsRetCode = GetTimeZoneInformation(@TakaTimeZon2) MsRetCode = GetTimeZoneInformation(TakaTimeZon2Ptr) End Function
1053 名前:デフォルトの名無しさん [2016/12/10(土) 17:12:16.00 ID:BUzq8JlI.net] タイムゾーン関係のライブを見ていたら、 西暦⇔日数の換算ルーチンで、倍精度超過の整数ルーチンがあり しっかと、無限倍精度ルーチン、BDC型が使われていた。 新ライブに移行するにも、英文解読が終わっていないからして、 結論、自前の無限倍精度ルーチン復活。
1054 名前:デフォルトの名無しさん [2016/12/10(土) 20:05:27.64 ID:BUzq8JlI.net] C:\tool\FreeBASIC\fbc -s gui "Menu01.bas" "Menu01.rc" "..\Kako02\Mod\Taka01H.bas" "..\Kako02\Mod\Taka00f.bas" "..\Kako02\Mod\Taka01I.bas" "..\Kako02\Mod\Taka00c.bas" "..\Kako02\Mod\taka01G.bas" "..\Kako02\Mod\Taka00e.bas" "..\Kako02\Mod\Taka01.bas" "..\Kako02\Mod\Taka00d.bas" "..\Kako02\Mod\Taka05.bas" "..\Kako02\Mod\Taka01M.bas" C:\tool\FreeBASIC\bin\win32\ld.exe: reopening Menu01.exe: Permission denied C:\tool\FreeBASIC\bin\win32\ld.exe: final link failed: Permission denied Make done なにやら、抽象的障害メッセージを表示して、
1055 名前:停止した。 [] [ここ壊れてます]
1056 名前:デフォルトの名無しさん [2016/12/11(日) 10:27:06.45 ID:5UvE8iG9.net] >>969 放置しておいて、再起動したら、発生しなくなった。 原因不明。変数領域の食いつぶしか、モジュールの登録・削除を繰り返したために主記憶領域が乱れたものと思われる。 >>968 無限倍精度ルーチン、ベクトル演算とBDC演算のライブ化終了。 といっても、複数の表示枠の表示方法がわからないので、単機能枠だけしか作っていない。 起動枠(Dialog as main相当)から 保守ルーチン一群の選択メニュー枠を表示して 選択メニュー枠から個別の保守ルーチン・動作試験ルーチン枠を起動していた。 この分離方法が今のところ分からない。 ライブから起動していた、非常駐部のルーチンはごく少しだが常駐部に移動することを始めた。 しかし、今のところ、保守ルーチンの起動方法がわからないので、放置。 特権の最上位で起動して、他からの干渉を排除して、動かすという方法もあるが、 INIファイルの占有方法がわからないので、他からの干渉を排除する方法がわからない。 ユーザーレベルで(個別のタスクが個別に)対応するのは簡単だが、ノートパットという誰でも起動できる強力なタスクが干渉することを排除できない。
1057 名前:デフォルトの名無しさん [2016/12/11(日) 10:43:50.97 ID:5UvE8iG9.net] レジストリー関係を覗いたいたら、 Win 95-2000の頃には存在していた、 OS起動直後に中身を全削除する親キー(HKEY_CLASSES_ROOT等)がわからない。 ユーザーレベルで対応するときに、 何かおかしなことが発生した、つまり、 占有中であることを宣言して、宣言を破棄して開放する前に、異常終了した場合 時に、占有関係データを破棄する必要がある。 OS起動時に、中身を全削除してくれるレジストリーは、占有情報の保管場所として適切な場所にある。 これがわからない。 ユーザーレベルでやるのであれば、スイッチ、多くの場合には存在を隠しているスイッチを指定して、 関係情報を全削除、終了、という方法をとる。
1058 名前:デフォルトの名無しさん [2016/12/12(月) 22:09:02.25 ID:5xU3iLZ7.net] 金土日の3日間の処理で、 Declare 文を集めた *.biファイルのサイズが 35KB から 55KBに増えた。 よくまー、。これだけの単純作業を繰り返したもので。 コンパイラーが通れば、多少おかしな状態でも可能 という条件だからこそできた早業。これで入出力引数のチェックなんて入れたらば、終わるわけがない。 引数リストの作成ルーチンも復活させなければならないが、ファイル選択ルーチンが未完成。
1059 名前:デフォルトの名無しさん [2016/12/13(火) 21:43:00.09 ID:4e1gXBvt.net] V.B.の WeekDay(), DataPart()関数を使っていた。 Free-Basic では、内部処理用時間変数を引数とする場合しか認めていない、文字変数を引数とする場合を認めていないので、エラーになる。 前者はどこかに作っておいたはず。みつけるだけ。 後者は、0から作ることになる。 どちらも、曜日を指定する場合で、RFC型時間変数にしか使わないのがせめてもの救い(後回しにできる)。 これは、 メール処理として、メールサーバーが記録した日時を読み取るルーチンを作った。 対として、逆関数も作った。この逆関数が残っていたもの。 正関数と逆関数の2つのルーチンを作って、乱数でてきとうな値を作って、 元値と、正関数・逆関数を通した値を比較する。 両者に違いがあれば、どこかに間違いがあることがわかる。
1060 名前:デフォルトの名無しさん [2016/12/14(水) 22:54:08.74 ID:2JEVbY+L.net] >>973 つづき。 中身をみたら、引数の違いだけで両者ともに同じ処理。 ほぼ同一処理の引数違いの自家製ルーチンを見つけて、復活。
1061 名前:デフォルトの名無しさん [2016/12/15(木) 21:14:04.49 ID:9nAvfrOI.net] バイナリファイルへの書き込みで Put #FileNo2Long, , AAByte() がFreeBasic の書式。FortranやVisual Basic では、AAByte と配列全体を示す場合には()をつけない。 違いに注
1062 名前:モ。半角⇔全角の変換命令がないので作った。余計な部分は、大域変数として宣言すると常駐するための物。 現時点でどのライブファイルが担当するのか決めていないので、局所宣言になっている。 Public Function StrConvAsc2SjisString(ChacterType As Integer, AAString As String) As String Const TakaSubRoutineNo as long = 10& '*-* ASC半角カタカナを全角平仮名・全角片仮名に書き換える 'ChacterType (入);{2;全角平仮名, (他);全角片仮名} 'AAString (入);書き換え前の文字列 'StrConvAsc2SjisString (出);書き換え後の文字列 Dim As String ChacterGLstring(&h20 To &h7E), ChacterGHstring(&hA0 To &hDF) Dim As Long ChacterGAsetFig1 = 0 Dim As Integer ChacterGAsetFig2 = 0 Const GLstring = " !”#$%&’()*+,−./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_‘abcdefghijklmnopqrstuvwxyz{|} ̄" Const GHstring1 = " 。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜" Const GHstring2 = " 。「」、・をぁぃぅぇぉゃゅょっーあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわん゛゜" Dim As Long IAA, IBB Dim As String BBstring TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo) IF (ChacterGAsetFig1 = 0) or (ChacterGAsetFig2 <> ChacterType) then ChacterGAsetFig1 = 1 IBB = 0 [] [ここ壊れてます]
1063 名前:デフォルトの名無しさん [2016/12/15(木) 21:14:46.37 ID:9nAvfrOI.net] For IAA = &h20 To &h7E IBB = IBB + 1 ChacterGLstring(IAA) = Mid$(GLstring, IBB, 2) IBB = IBB + 1 Next IAA IF (ChacterType = 2) then 'ASC半角カタカナを全角平仮名に書き換える IBB = 0 For IAA = &hA0 To &hDF IBB = IBB + 1 ChacterGHstring(IAA) = Mid$(GHstring2, IBB, 2) IBB = IBB + 1 Next IAA ChacterGAsetFig2 = ChacterType else 'ASC半角カタカナを全角片仮名に書き換える IBB = 0 For IAA = &hA0 To &hDF IBB = IBB + 1 ChacterGHstring(IAA) = Mid$(GHstring1, IBB, 2) IBB = IBB + 1 Next IAA ChacterGAsetFig2 = 1 End if ChacterGAsetFig1 = 2 End if
1064 名前:デフォルトの名無しさん [2016/12/15(木) 21:15:32.70 ID:9nAvfrOI.net] BBstring = "" For IAA = 1 to Len(AAString) IBB = asc(Mid$(AAstring, IAA, 1)) Select Case IBB Case &h00 to &h1F, &h7F, &HFF 'BBstring = BBstring + "-"+Hex$(IBB)+"-"+Chr$(IBB) BBstring = BBstring + Chr$(IBB) Case &h20 To &h7E BBstring = BBstring + ChacterGLstring(IBB) Case &h80 to &H9F BBstring = BBstring + Chr$(IBB) IAA = IAA + 1 BBstring = BBstring + Chr$(IBB) Case &hA0 To &hDF BBstring = BBstring + ChacterGHstring(IBB) Case &HE0 To &hFE BBstring = BBstring + Chr$(IBB) IAA = IAA + 1 BBstring = BBstring + Chr$(IBB) Case else BBstring = BBstring + Chr$(IBB) End select Next IAA StrConvAsc2SjisString = BBString End Function
1065 名前:デフォルトの名無しさん [2016/12/15(木) 21:25:32.19 ID:9nAvfrOI.net] GH領域の半角空白、&hA0は、GL領域の半角空白と等値であるとして処理している。 >>957 のつづき。Put 命令関係を探していたら、 makoto-watanabe.main.jp/freebasic/PgBinary.html をみつけた。まだ試していないが、一息ついたらばやってみる予定。
1066 名前:sage [2016/12/15(木) 21:30:42.16 ID:VRbOmxa/.net] https://www.youtube.com/watch?v=xHx5MbIGEoY https://www.youtube.com/watch?v=8fPmkq1CkCU https://www.youtube.com/watch?v=PR6r40GbIfk
1067 名前:デフォルトの名無しさん [2016/12/16(金) 21:56:34.17 ID:rZ3nkbqi.net] >>978 のつづき。 Dim Shared As String TestFileString, ReadDataString Dim Shared As Long FileNoLong Dim Shared As UByte aByte(0 To &h0F) と大域宣言して TestFileString = ExePath + "\test.test.txt" FileNoLong = FreeFile Open TestFileString For Output As #FileNoLong Print #FileNoLong,"0123456789ABCDEF"; Print #FileNoLong,"0123456789ABCDEF"; Print #FileNoLong,"0123456789ABCDEF"; Print #FileNoLong,"0123456789ABCDEF"; Close #FileNoLong と、試験ファイルを作成して。 TestFileString = ExePath + "\test.test.txt" Open TestFileString For Binary Access Read Write Lock Read Write As #FileNoLong For IBB = 1 To 3 Get #FileNoLong, , aByte() ReadDataString = "" For IAA = LBound(aByte) To UBound(aByte): ReadDataString = ReadDataString + Chr$(aByte(IAA))+"
1068 名前: ": Next IAA MessageBox(TakaHWND, "Hello ("+ReadDataString +")", "Messagebox caption", MB_ICONINFORMATION) Next IBB Close #FileNoLong と、読みだすと、メッセージボックス表示中に、ノートパットで中身を覗ける [] [ここ壊れてます]
1069 名前:デフォルトの名無しさん [2016/12/16(金) 22:21:02.16 ID:rZ3nkbqi.net] >>597 つづき。 実行形式ファイル内に存在しないファイルのアイコンの表示には、相変わらず成功していない。 'IconFile = "D:\bas\Projects\Editbox\Res\Anchor1.ico" 'declare function LoadIconA(byval hInstance as HINSTANCE, byval lpIconName as LPCSTR) as HICON 'hIcon=LoadIcon(hInstance, @IconFile) ''hIcon=LoadIcon(hInstance, Cast(ZString PtrIconFile)): '構文エラー SendMessage(TakaHWND,WM_SETICON,NULL,Cast(LPARAM,hIcon)) コンパイラーは通るが、ディスク上のファイルを読み取って表示しない 実行形式ファイル内のアイコンの切り替えには成功した。 Case IDC_BTN1 hIcon=LoadIcon(hInstance,Cast(ZString Ptr,500)) SendMessage(TakaHWND,WM_SETICON,NULL,Cast(LPARAM,hIcon)) Case IDC_BTN2 hIcon=LoadIcon(hInstance,Cast(ZString Ptr,501)) SendMessage(TakaHWND,WM_SETICON,NULL,Cast(LPARAM,hIcon))
1070 名前:デフォルトの名無しさん [2016/12/16(金) 22:36:53.84 ID:rZ3nkbqi.net] V.B.と同じだと思っていた Byte 型変数。 比較ルーチンを使っている場合に、FreeBasic での違いに泣くので要注意。 makoto-watanabe.main.jp/freebasic/PgByte.html#start -128〜127 の範囲の値を保持できます。 V.B.では makoto-watanabe.main.jp/freebasic/PgUbyte.html#start 0〜255の範囲の値を保持できます。 と同じなので、 移植作業の時には、As Byte 宣言を一律 As UByte 宣言に書き換えても良いかもしれない。 V.B.のころは 値返しのFunction 文で、名称の末尾1文字を I;単精度整数, L;倍精度整数, S;単精度実数, D;倍精度実数で、 末尾に Bool が付いた場合には論理変数で あたいを返す用にしていた。入力引数のほうもほぼ同様な扱いにしていた。 ところが、整数型がFreeBasicではやたら増えて、合計15種類もある。 >>962 のように番号で区別するように、変更中。
1071 名前:デフォルトの名無しさん [2016/12/18(日) 12:29:50.18 ID:1/CaK5B1.net] makoto-watanabe.main.jp/freebasic/ExtLibZip.html#start の見本ファイルが構文障害で動作せず。 Private Sub unpack_zip_file(ByVal zip As zip_t Ptr, ByVal i As Integer) Dim As zip_file_t Ptr fi = zip_fopen_index(zip, i, 0) と、 As zip → As zip_t、As zip_file → As zip_file_t の変数型の変更で動作するようになった。 "C:\tool\FreeBASIC\inc\zip.bi" から、 Dim As String filename = *zip_get_name(zip, i, 0) より「zip_get_name」の宣言文を見つけて、引数「zip」の宣言に合わせた。 以下同様。
1072 名前:デフォルトの名無しさん [2016/12/18(日) 12:31:31.87 ID:1/CaK5B1.net] >>983 つづき。 コンパイラーが通っただけだから。圧縮・解凍するかは試してない。
1073 名前:デフォルトの名無しさん [2016/12/18(日) 21:17:31.69 ID:1/CaK5B1.net] >>984 つづき。 リンカーが通らなかった。 C:\tool\FreeBASIC\fbc -s gui "DllZip01.bas" "DllZip01.rc" "LZH01.bas" C:\tool\FreeBASIC\bin\win32\ld.exe: cannot find -lzip C:\tool\FreeBASIC\bin\win32\ld.exe: cannot find -lz Make done >>983 の内容が LZH01.bas にコピーしてある。 *.dll 又は *.a ファイルを探すことになるのだが https://search.yahoo.co.jp/search?_adv_prop=web&x=op&ei=UTF-8&fr=top_ga1_sa&fr2=op&submit=%E6%A4%9C%E7%B4%A2& va=libzip&va_vt=any&vp=&vp_vt=any&vo=lz.a+lz.dll+lzip.a+lzip.zip+&vo_vt=any&ve=&ve_vt=any&vd=all&vst=0&vs=&vf=all&vc=&fl=0 どうもソースコード配布らしい。 makoto-watanabe.main.jp/freebasic/ の https://nih.at/libzip/libzip-1.1.3.tar.xz も https://nih.at/libzip/libzip-1.1.3.tar.gz も、ソースコードらしきものがあったが、*.A, *.DLL は発見で゜傷。 Win10用のgz系圧縮ファイルの解凍ソフトは www.vector.co.jp/soft/
1074 名前:winnt/util/se489109.html が見つかった。 gz系解凍のみのために用意していたソフトがWin10で使えなくなったので助かった。 [] [ここ壊れてます]
1075 名前:デフォルトの名無しさん [2016/12/18(日) 21:40:48.13 ID:1/CaK5B1.net] ライブ関係ファイル >>969 に一部表示してあるけど、訳が分からなくなって ルーチンの引数の入出力情報を整理しようとして始めた。 ライブとして整理が終わったファイルが30位、2つの疑似というか偽装というかファイル。 後者の2つは自動作成だから、元ファイルがまともに作られているのであれば、無検査。 700個ぐらいのルーチンがある。 ルーチン名、引数の型、入出力形式の3つを保存する必要に迫られた。 各ルーチンの番号をフルわけで、 Const TakaSubRoutineNo as long = 109& 行を入れてゆく。ついでに、バグ取りルーチン、現在実行中のルーチン名を保存する TakaDammyReturnCode4 = TakaErrorPointSach(IniNameString, TakaSubRoutineNo) 行も書き込む。 そのほかに、ファイル名(モジュール名)を保存する Const IniNameString as String = "taka01G" や、モジュール内に存在するルーチン数を示す 'サブルーチン総数 : 10 や、ソースの取り扱いを容易にする '#Include Once "..\Kako02\Mod\TakaCom0.bi" 等のコメント行も自動で書き込む。 当然こんなことをすれば、書き間違いを結構するわけで、未処理のファイルはそっくり残しておきたい。 ディレクトりー内一括圧縮保存ルーチン、SendToZIP hatenachips.blog34.fc2.com/blog-entry-376.html 相当ルーチンを作ろうとしたのが、今日の一連の作業。 現在 (なんたら)\MOd\ 内ファイル数約100、サイズ5MB。 内、約30ファイルが作成したもの、約30ファイルが修正不能として放置したファイル、残り40ファイルが手を付けていないファイル。
1076 名前:渡辺真 [2016/12/18(日) 21:41:51.20 ID:Mt5C7DVY.net] GMP(任意精度算術ライブラリ)の上手い使い方を教えてもらいました。 makoto-watanabe.main.jp/freebasic/tipsGmpOverloading.html 構造体として、GMP のユーザ定義型を作り、演算子の多重定義を含めて .bi ファイルにします。 これをインクルードすれば、通常のプログラムの Dim 文の変数の型を修正するだけで、取り扱える数値の桁数を、任意に拡張できるのです。 これは感激です。 もう一つ。 素因数分解の関数も教えてもらいました。 makoto-watanabe.main.jp/freebasic/tipsGmpPrimefactors.html これを使うと、例えば、21桁の数値 121,439,531,096,594,251,777 を、3分足らずで素因数分解できました。
1077 名前:デフォルトの名無しさん [2016/12/20(火) 20:26:41.53 ID:UXtQEXtu.net] >>986 のつづき。 一部書き換えた場合に、 どこが違っているのか、を比較して意図した内容になっているか、 を見る必要がある。意図してない内容ならば、バグかウィルスソフトにしか過ぎない。 2ファイルの比較ソフトとして使っていたのだが、異なる行の色表示が一致行との色表示と同じなので、使わなかった。 ぷれぷれDiff www.vector.co.jp/soft/dl/winnt/util/se141425.html 不一致行の色を指定する方法が見つかったので、Win10でも使えることが判明した。 起動後、も左上、枠線上に6種類のマーク画像が並んでいる。 上から4つ目、下から3つ目、ネイルハンマー image.search.yahoo.co.jp/search;_ylt=A2RCMY5aE1lY4hoA1iuU3uV7?p=%E3%83%8D%E3%82%A4%E3%83%AB%E3%83%8F%E3%83%B3%E3%83%9E%E3%83%BC&aq=-1&oq=%E3%83%8F%E3%83%B3%E3%83%9E%E3%83%BC&ei=UTF-8 とスパナの頭が重ね書きになっているところをクリック。「環境設定」の表示枠が表示される 左上、「文字色」内の「追加行」・「変更行」・「移動行」が「背景」と同じ白色になっていたので、
1078 名前:クリック。 「色の設定」枠が表示されるので、適当に選んで「OK」をクリック。 こんな調子で使えるようになった。 [] [ここ壊れてます]
1079 名前:デフォルトの名無しさん mailto:sage [2016/12/22(木) 13:29:17.73 ID:qSEuLaQE.net] GPLのプログラムを使う自由があって GFDLのドキュメントを使う自由がある。 本来のライセンスによる提供物は本来のライセンスの提供物のままであって 自分にはキュレーションメディアは必要無い。 ただ単に自分が使いたいように使い倒すまでのこと。
1080 名前:デフォルトの名無しさん [2016/12/22(木) 20:56:55.91 ID:Vulz5JgX.net] >>978 GH領域の半角空白、&hA0は、 が間違い。しばらくコードをいじっていなかったので記号を忘れた。GRが正しい記号。 00euc.jp/i18n/charcode.ja.html ISO 2022 の構造(8単位系) 参照。
1081 名前:デフォルトの名無しさん [2016/12/22(木) 21:35:21.72 ID:Vulz5JgX.net] Lcase$()関数とUcase$()関数は、7Bitコード対応らしく、8Bitに対応していなかった。 第8bit目を見ないで、一律7bitコードとして処理している(Or40だったかな)模様。 たしか、関係システムディレクトリー、注意 末尾¥付、あたりだったか、じばけする。 今のところ、コメント文の処理に困るぐらいで、大きな被害は出ていない。そのうち対応に迫られることとなる。 使い方としては、 Bstring = "#Include " TakaDammyReturnCode = CodeChing5(Astring, Bstring, Bstring, 0) "#Include "、大文字小文字の混在している"#InCluEe "、全部大文字の"#INCLUDE "、全部小文字の"#include "あたりを"#Include "に書き換えるという処理。
1082 名前:デフォルトの名無しさん [2016/12/22(木) 21:36:10.43 ID:Vulz5JgX.net] >>975 にあるように '*-* ASC半角カタカナを全角平仮名・全角片仮名に書き換える と怪しげなコメント行がある。「'*-* 」が各サブルーチンに1行だけ存在し、ルーチンの概要を示している。 これをかき集めて、先頭に書き並べると、ライブファイル内のルーチンの一覧表が完成する。 Visual Basic では、ワードを使ってドキュメントがどうのこうのと書いてあったが、理解できなかった。 それで、Wterm www.vector.co.jp/vpack/filearea/dos/net/term/wterm という通信ソフトの取扱説明書のどこかに、ソースから引き抜いして説明書を作ったのでおかしな日本語がある。旨の記載があった。 これをまねして作ったのが、怪しげなコメント行。'* * の4文字が固定、*と*の間の1文字に特殊な意味を持たせている。 ここにUcase$()で一律大文字にしてInstr(???, "'*-* ")=1等で行の意味を特定していた。 Ucase$() が使えないので、先頭5文字だけ切り出して比較するという処理に変えた。 FreeBasic で&hA0を使っているとヤバイのだが、 文字定数を意味する ""内処理と""外処理では意味が変わってくる。 自動書き換えルーチンで書き換えの対象となる後者と、書き換えてはマンマシンテンターフェース上問題になってしまうであろう前者の違いである。 MS-DOSの頃は&h00を使っていたのだが、FreeBasicでは文字変数の末尾という意味で使っているので使えない。 かわりに&hA0を使って""内を塗りつぶしてInstr()文で検索している。
1083 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています