〜 ファイル 〜
INIファイルにデータを保存 (要KERNEL32.DLL)

「*.ini」ファイルを作成するサンプルです。
INIファイルとはWindowsフォルダに入っているwin.iniファイル等と同じものであり、
拡張子こそ通常のテキストファイル「*.txt」とは違いますが中身はそれと同じですので、
書式に沿って、bsave命令やnotesave命令でファイル書き出ししても問題はありませんが、
WinAPIを用いて設定する場合、WritePrivateProfileString関数というものを使用します。
尚、INIの基本書式として、下記のようになっています。

[セクション1] キー1 = データ1 キー2 = データ2 キー3 = データ3   :   : [セクション2] キー1 = データ1 キー2 = データ2 キー3 = データ3   :   :

データ部の取得はコチラで紹介している、セクション名とキー名を同時に指定する方法なので、 異なるセクションであれば同一キー名があっても競合することはありません。 上記のキー名とデータの間にはスペースを入れていますが、実際は入っていてもいなくても影響ありません。 HSPスクリプト同様に、直接ファイルを見られた際にわかりやすくするメモは、 HSPのコメント同様の半角セミコロン「;」を冒頭において「; メモ」という形式で書きましょう。 APIを利用して正常に書き込み完了すると、0以外、失敗すると0が返りますので、 各自、その戻り値を元に次に行うべき処理を行ってください。

setini 設定情報配列
設定情報配列INIファイルに設定する情報を文字列型配列で指定する。
各設定要素は、保存ファイル(=0)、セクション(=1)、キー(=2)、値(=3)とする。
尚、設定に失敗したら、statに0が、成功なら1が返る。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
	ll_libload kernel, "kernel32.dll"
	ll_getproc WritePrivateProfileString, "WritePrivateProfileStringA", kernel

#module
#deffunc setini val
	mref info, 56
	mref stt, 64
	ll_getptr info.0 : ll_ret prm.3
	ll_getptr info.1 : ll_ret prm.0
	ll_getptr info.2 : ll_ret prm.1
	ll_getptr info.3 : ll_ret prm.2
	ll_callfunc prm, 4, WritePrivateProfileString@
	ll_ret prm : stt = prm
	return
#global

	sdim string, 256, 4
	string.1 = "SectionName", "KeyName", "SaveData"
	pos  10,  10 : mes "セクション"
	pos 100,  10 : input string.1, 200, 20, 31
	pos  10,  40 : mes "キー"
	pos 100,  40 : input string.2, 200, 20, 31
	pos  10,  70 : mes "データ"
	pos 100,  70 : input string.3, 200, 20, 31
	pos  10, 100 : mes "保存"
	pos 100, 100 : button "実行", *save
	stop

*save
	dialog "ini", 17, "保存INI名"
	if stat {
		string = refstr
		setini string
		if stat = 0 {
			dialog "正常に書き込めませんでした", 1
		}
	}
	stop

成功フラグ = setini(保存ファイル, セクション, キー, 値)
成功フラグ設定失敗(=0)か成功(=1)かのフラグ値受取先を指定する。
保存ファイル保存対象INIファイルを指定する。
セクションINIファイルに設定するセクションを指定する。
キーINIファイルに設定するキーを指定する。
INIファイルに設定する値を指定する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#uselib "kernel32.dll"
#cfunc global WritePrivateProfileString "WritePrivateProfileStringA" sptr, sptr, sptr, sptr

#module
#defcfunc setini str file, str section, str key, str value, local s
	s = section, key, value, file
	return WritePrivateProfileString(s.0, s.1, s.2, s.3)
#global

	sdim string, 32, 3
	string = "SectionName", "KeyName", "SaveData"
	pos  10,  10 : mes "セクション"
	pos 100,  10 : input string.0, 200, 20, 31
	pos  10,  40 : mes "キー"
	pos 100,  40 : input string.1, 200, 20, 31
	pos  10,  70 : mes "データ"
	pos 100,  70 : input string.2, 200, 20, 31
	pos  10, 100 : mes "保存"
	pos 100, 100 : button gosub "実行", *save
	stop

*save
	dialog "ini", 17, "保存INI名"
	if stat {
		if setini(refstr, string.0, string.1, string.2) = 0 {
			dialog "正常に書き込めませんでした", 1
		}
	}
	return