2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

【QBASIC互換!?】FreeBasic【GPL】

1 :デフォルトの名無しさん:2006/02/08(水) 15:23:06 .net
FreeBasic
ttp://www.freebasic.net/

建てたいって人がいたので勝手に建てた
後はご自由にどうぞ
俺は知らん

943 :デフォルトの名無しさん:2016/11/23(水) 23:57:30.39 ID:qZZB3vTy.net
>>931
ねんの為に「日本の古本屋」で検索したら、3巻揃いが妥当な値段で出品されていました

944 :渡辺真:2016/11/25(金) 23:28:20.51 ID:tPNxGDnY.net
>>938
>936 をみたら、三角関数などを求めるルーチンがない

本家の掲示板にプログラム例がありました。
http://www.freebasic.net/forum/viewtopic.php?t=23225
「new header file GMP」の2つめのコメント
by dodicat ≫ Jan 17, 2015 1:11
の中にあるプログラムです。

945 :デフォルトの名無しさん: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
な調子で収集。

946 :デフォルトの名無しさん: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

947 :デフォルトの名無しさん: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 & "ファイル名大文字小文字区別"
(中略、こんな調子で、属性フラグを作成しているのだが、ロボットチェックに引っかかってかけないんだわ) 

948 :デフォルトの名無しさん: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

949 :デフォルトの名無しさん: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 関係ファイルには未発見。

検索では、
http://math-www.uni-paderborn.de/~aggathen/vorl/2004ws/sem/markus-steinborn.pdf#search=%27Type+mpf_t+gmp.bi%27
http://www-it.sci.waseda.ac.jp/teachers/w405201/CPR2/cprogram15.pdf#search=%27mpf_t+gmp.bi%27
がヒット。
前者はドイツ語なので、英語よりも理解できない程度の語学力なので詳細不明。
後者は日本語ですが、C言語の解説です。記載頁64, アクロバット67頁右段に
>任意精度の整数・有理数・実数をサポートしています.実数型はmpf_tと宣言します.
とあり、BIファイルを見つけてFreeBasic用に変換しないと使えないでしょう。

>この不正確さを払拭するには,エネルギー保存が満たされるような常微分方程式の解法アルゴリズムを採用するといった手段が王道とされています.がしかし,精度を100桁くらいに増やして計算してみるといった力技も捨てがたい魅力があります.
とあるように、
数学や物理を専門としない人(数学を専門としない人々)にとっては、力技に頼るしかない。
数学なんて、難しくてわからないから、多倍精度演算で、小中学校で学ぶ範囲の数処理を使って、えぃ!ゃー!、とやる方法です。

950 :渡辺真:2016/11/27(日) 21:40:18.83 ID:22yXElOy.net
>>938
>936 をみたら、三角関数などを求めるルーチンがない

日本語訳を追加しました。
http://makoto-watanabe.main.jp/freebasic/tipsGmpFunctions.html
翻訳していて、内容のすごさに感激しました。

951 :デフォルトの名無しさん:2016/11/29(火) 21:43:47.63 ID:MxHdA4L3.net
>>920 の
選択ディレクトりー内のファイル作成
が作成終了。
残るは、ライブ化。

>>950
中身を試してみることはやっていませんが、
LISPでコケるのが、多倍精度演算ルーチンの作成で、多くの人々が数値計算から去ってゆきます。
>採用するといった手段が王道
なんてことは、デカコンがいくらでも使える人々ならやっているわけで
素人同然の学部生ができないのです。
一部の人間だけが独占して、てかい面している(暴行すらも許される)世界です。
高卒程度のズブのド素人が、数値計算の世界に手を突っ込めるということは、素晴らしいことです。

母校の情報処理関係学科の定員は45名、卒業生は1桁。30名以上が毎年中退してします。
同級生の奥様も、役人やっている通称お姉さまも、結局中退しました。
数値処理の世界を多くの人々に広げられれば良いですね。

952 :デフォルトの名無しさん:2016/12/01(木) 21:57:52.24 ID:FgpY/gwj.net
コマンド行、実行形式のファイル名の後に付ける修飾語、コマンドラインについてなんだけど
http://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でも、スイッチの指定をいじるとまともにコンパイルされない。

953 :デフォルトの名無しさん:2016/12/01(木) 22:40:35.97 ID:FgpY/gwj.net
>>952 でスイッチの解釈が問題になった理由
http://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 方式に合わせたスイッチを指定するようにするのか
が今迷っている内容。

954 :デフォルトの名無しさん: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
http://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
すべての検査が終了した。

955 :デフォルトの名無しさん: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/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が必要です。

956 :デフォルトの名無しさん: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 以外の型の文字変数)もある。

957 :デフォルトの名無しさん:2016/12/03(土) 12:38:01.18 ID:HN6NcG00.net
http://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 に変わる手法を探している。
'http://microsoft.public.jp.access.narkive.com/VGCEWUUt
が理解できた方法だが、よくわからないので、INIファイルを使う方法を検討中
起動直後にRename する方法もあるが、分割LOADをWinが使っていた場合に、絶望的な状況に陥りやすい。

958 :デフォルトの名無しさん: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

959 :デフォルトの名無しさん: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 (CommonStringSetFig = 0) then IAA = Local_CommonStringSet(ReadActionType)
'Const DoubleBootSecName As String = "DoubleBoot" (大域)
IAA = IniFileRead2(CtrlFile5String, DoubleBootSecName, AppExeNameString, BootCount)
DoubleBootChick = (BootCount = 1)
End Function

960 :デフォルトの名無しさん: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

961 :デフォルトの名無しさん: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

962 :デフォルトの名無しさん: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

963 :デフォルトの名無しさん: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ファイルを使った重複起動禁止

964 :デフォルトの名無しさん: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命令のスイッチとして解釈してしまうから

ナルト(アットマーク)処理、
http://makoto-watanabe.main.jp/freebasic/CompilerOptoptfile.html#start
は、360とあまり違っていないので、360処理のライブにかぶせる予定だが
読んだ雰囲気では、解釈が一部違う。めんどくさいから、独自の文法による拡張命令にするか。
ライブでの処理は、今のところ考えていない。
というか、
@処理はバッチ処理のタスクの所轄なので、バッチ処理を考えていない今では、何も作れない。
システムを操作する必要も出てくるから。

965 :デフォルトの名無しさん: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_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 参照。

966 :デフォルトの名無しさん: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 文も一部自動作成するようにした。
大域参照するルーチンだけ自動作成にして、局所参照は今まで通り手作業で入れることとした。
今のところは、単にかき集めただけだが、他への流用を考えて、整列などをしなければならないだろう。

967 :デフォルトの名無しさん: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

968 :デフォルトの名無しさん:2016/12/10(土) 17:12:16.00 ID:BUzq8JlI.net
タイムゾーン関係のライブを見ていたら、
西暦⇔日数の換算ルーチンで、倍精度超過の整数ルーチンがあり
しっかと、無限倍精度ルーチン、BDC型が使われていた。

新ライブに移行するにも、英文解読が終わっていないからして、
結論、自前の無限倍精度ルーチン復活。

969 :デフォルトの名無しさん: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

なにやら、抽象的障害メッセージを表示して、停止した。

970 :デフォルトの名無しさん:2016/12/11(日) 10:27:06.45 ID:5UvE8iG9.net
>>969 放置しておいて、再起動したら、発生しなくなった。
原因不明。変数領域の食いつぶしか、モジュールの登録・削除を繰り返したために主記憶領域が乱れたものと思われる。

>>968 無限倍精度ルーチン、ベクトル演算とBDC演算のライブ化終了。
といっても、複数の表示枠の表示方法がわからないので、単機能枠だけしか作っていない。
起動枠(Dialog as main相当)から
保守ルーチン一群の選択メニュー枠を表示して
選択メニュー枠から個別の保守ルーチン・動作試験ルーチン枠を起動していた。
この分離方法が今のところ分からない。
ライブから起動していた、非常駐部のルーチンはごく少しだが常駐部に移動することを始めた。
しかし、今のところ、保守ルーチンの起動方法がわからないので、放置。
特権の最上位で起動して、他からの干渉を排除して、動かすという方法もあるが、
INIファイルの占有方法がわからないので、他からの干渉を排除する方法がわからない。
ユーザーレベルで(個別のタスクが個別に)対応するのは簡単だが、ノートパットという誰でも起動できる強力なタスクが干渉することを排除できない。

971 :デフォルトの名無しさん:2016/12/11(日) 10:43:50.97 ID:5UvE8iG9.net
レジストリー関係を覗いたいたら、
Win 95-2000の頃には存在していた、
OS起動直後に中身を全削除する親キー(HKEY_CLASSES_ROOT等)がわからない。
ユーザーレベルで対応するときに、
何かおかしなことが発生した、つまり、
占有中であることを宣言して、宣言を破棄して開放する前に、異常終了した場合
時に、占有関係データを破棄する必要がある。
OS起動時に、中身を全削除してくれるレジストリーは、占有情報の保管場所として適切な場所にある。

これがわからない。
ユーザーレベルでやるのであれば、スイッチ、多くの場合には存在を隠しているスイッチを指定して、
関係情報を全削除、終了、という方法をとる。

972 :デフォルトの名無しさん:2016/12/12(月) 22:09:02.25 ID:5xU3iLZ7.net
金土日の3日間の処理で、
Declare 文を集めた *.biファイルのサイズが 35KB から 55KBに増えた。
よくまー、。これだけの単純作業を繰り返したもので。

コンパイラーが通れば、多少おかしな状態でも可能
という条件だからこそできた早業。これで入出力引数のチェックなんて入れたらば、終わるわけがない。

引数リストの作成ルーチンも復活させなければならないが、ファイル選択ルーチンが未完成。

973 :デフォルトの名無しさん:2016/12/13(火) 21:43:00.09 ID:4e1gXBvt.net
V.B.の WeekDay(), DataPart()関数を使っていた。
Free-Basic では、内部処理用時間変数を引数とする場合しか認めていない、文字変数を引数とする場合を認めていないので、エラーになる。
前者はどこかに作っておいたはず。みつけるだけ。
後者は、0から作ることになる。

どちらも、曜日を指定する場合で、RFC型時間変数にしか使わないのがせめてもの救い(後回しにできる)。
これは、
メール処理として、メールサーバーが記録した日時を読み取るルーチンを作った。
対として、逆関数も作った。この逆関数が残っていたもの。
正関数と逆関数の2つのルーチンを作って、乱数でてきとうな値を作って、
元値と、正関数・逆関数を通した値を比較する。
両者に違いがあれば、どこかに間違いがあることがわかる。

974 :デフォルトの名無しさん:2016/12/14(水) 22:54:08.74 ID:2JEVbY+L.net
>>973 つづき。
中身をみたら、引数の違いだけで両者ともに同じ処理。
ほぼ同一処理の引数違いの自家製ルーチンを見つけて、復活。

975 :デフォルトの名無しさん:2016/12/15(木) 21:14:04.49 ID:9nAvfrOI.net
バイナリファイルへの書き込みで
Put #FileNo2Long, , AAByte()
がFreeBasic の書式。FortranやVisual Basic では、AAByte と配列全体を示す場合には()をつけない。
違いに注意。半角⇔全角の変換命令がないので作った。余計な部分は、大域変数として宣言すると常駐するための物。
現時点でどのライブファイルが担当するのか決めていないので、局所宣言になっている。
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

976 :デフォルトの名無しさん: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

977 :デフォルトの名無しさん: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

978 :デフォルトの名無しさん:2016/12/15(木) 21:25:32.19 ID:9nAvfrOI.net
GH領域の半角空白、&hA0は、GL領域の半角空白と等値であるとして処理している。

>>957のつづき。Put 命令関係を探していたら、
http://makoto-watanabe.main.jp/freebasic/PgBinary.html
をみつけた。まだ試していないが、一息ついたらばやってみる予定。

979 :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

980 :デフォルトの名無しさん: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))+" ": Next IAA
MessageBox(TakaHWND, "Hello ("+ReadDataString +")", "Messagebox caption", MB_ICONINFORMATION)
Next IBB
Close #FileNoLong
と、読みだすと、メッセージボックス表示中に、ノートパットで中身を覗ける

981 :デフォルトの名無しさん: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))

982 :デフォルトの名無しさん:2016/12/16(金) 22:36:53.84 ID:rZ3nkbqi.net
V.B.と同じだと思っていた Byte 型変数。
比較ルーチンを使っている場合に、FreeBasic での違いに泣くので要注意。

http://makoto-watanabe.main.jp/freebasic/PgByte.html#start
-128〜127 の範囲の値を保持できます。
V.B.では
http://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 のように番号で区別するように、変更中。

983 :デフォルトの名無しさん:2016/12/18(日) 12:29:50.18 ID:1/CaK5B1.net
http://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」の宣言に合わせた。
以下同様。

984 :デフォルトの名無しさん:2016/12/18(日) 12:31:31.87 ID:1/CaK5B1.net
>>983 つづき。
コンパイラーが通っただけだから。圧縮・解凍するかは試してない。

985 :デフォルトの名無しさん: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
どうもソースコード配布らしい。
http://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系圧縮ファイルの解凍ソフトは
http://www.vector.co.jp/soft/winnt/util/se489109.html
が見つかった。
gz系解凍のみのために用意していたソフトがWin10で使えなくなったので助かった。

986 :デフォルトの名無しさん: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
http://hatenachips.blog34.fc2.com/blog-entry-376.html
相当ルーチンを作ろうとしたのが、今日の一連の作業。

現在 (なんたら)\MOd\ 内ファイル数約100、サイズ5MB。
内、約30ファイルが作成したもの、約30ファイルが修正不能として放置したファイル、残り40ファイルが手を付けていないファイル。

987 :渡辺真:2016/12/18(日) 21:41:51.20 ID:Mt5C7DVY.net
GMP(任意精度算術ライブラリ)の上手い使い方を教えてもらいました。
http://makoto-watanabe.main.jp/freebasic/tipsGmpOverloading.html
構造体として、GMP のユーザ定義型を作り、演算子の多重定義を含めて .bi ファイルにします。
これをインクルードすれば、通常のプログラムの Dim 文の変数の型を修正するだけで、取り扱える数値の桁数を、任意に拡張できるのです。
これは感激です。

もう一つ。
素因数分解の関数も教えてもらいました。
http://makoto-watanabe.main.jp/freebasic/tipsGmpPrimefactors.html
これを使うと、例えば、21桁の数値 121,439,531,096,594,251,777 を、3分足らずで素因数分解できました。

988 :デフォルトの名無しさん:2016/12/20(火) 20:26:41.53 ID:UXtQEXtu.net
>>986 のつづき。
一部書き換えた場合に、
どこが違っているのか、を比較して意図した内容になっているか、
を見る必要がある。意図してない内容ならば、バグかウィルスソフトにしか過ぎない。
2ファイルの比較ソフトとして使っていたのだが、異なる行の色表示が一致行との色表示と同じなので、使わなかった。
ぷれぷれDiff
http://www.vector.co.jp/soft/dl/winnt/util/se141425.html
不一致行の色を指定する方法が見つかったので、Win10でも使えることが判明した。
起動後、も左上、枠線上に6種類のマーク画像が並んでいる。
上から4つ目、下から3つ目、ネイルハンマー
http://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
とスパナの頭が重ね書きになっているところをクリック。「環境設定」の表示枠が表示される
左上、「文字色」内の「追加行」・「変更行」・「移動行」が「背景」と同じ白色になっていたので、クリック。
「色の設定」枠が表示されるので、適当に選んで「OK」をクリック。

こんな調子で使えるようになった。

989 :デフォルトの名無しさん:2016/12/22(木) 13:29:17.73 ID:qSEuLaQE.net
GPLのプログラムを使う自由があって
GFDLのドキュメントを使う自由がある。
本来のライセンスによる提供物は本来のライセンスの提供物のままであって
自分にはキュレーションメディアは必要無い。
ただ単に自分が使いたいように使い倒すまでのこと。

990 :デフォルトの名無しさん:2016/12/22(木) 20:56:55.91 ID:Vulz5JgX.net
>>978 GH領域の半角空白、&hA0は、
が間違い。しばらくコードをいじっていなかったので記号を忘れた。GRが正しい記号。
00http://euc.jp/i18n/charcode.ja.html
ISO 2022 の構造(8単位系)
参照。

991 :デフォルトの名無しさん: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 "に書き換えるという処理。

992 :デフォルトの名無しさん:2016/12/22(木) 21:36:10.43 ID:Vulz5JgX.net
>>975 にあるように
'*-* ASC半角カタカナを全角平仮名・全角片仮名に書き換える
と怪しげなコメント行がある。「'*-* 」が各サブルーチンに1行だけ存在し、ルーチンの概要を示している。
これをかき集めて、先頭に書き並べると、ライブファイル内のルーチンの一覧表が完成する。
Visual Basic では、ワードを使ってドキュメントがどうのこうのと書いてあったが、理解できなかった。
それで、Wterm http://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()文で検索している。

総レス数 992
520 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★