WZ6/マクロ集
#include <windows.h>
#include <text.h>
//#define ENABLESAMPLE
HTEXT newobj iniread(char *filename, char *section, char *keyname, char *defaultvalue);
// INIファイルから値を読みだす
// filename: ファイル名をchar*またはHTEXTで指定する。"wz://", "wzcfg://"が含まれていたら展開する。0なら"wzcfg://wzuser.ini"が指定される。
// section: セクション名をchar*またはHTEXTで指定する。0なら"Settings"が指定される。
// keyname: キー名を指定する。
// defaultvalue: キー名に対応した値がなかった場合の文字列を文字列定数またはHTEXTでしていする。0を指定すると0が戻り値になる。
// 戻り値:取得した値がHTEXTで返る。エラーが発生した場合と値が存在せずデフォルト値に0が指定された場合は0が返る。
BOOL iniwrite(char *filename, char *section, char *keyname, char *value);
// INIファイルに値を書き込む
// filename: ファイル名をchar*またはHTEXTで指定する。"wz://", "wzcfg://"が含まれていたら展開する。0なら"wzcfg://wzuser.ini"が指定される。
// section: セクション名をchar*またはHTEXTで指定する。0なら"Settings"が指定される。
// keyname: キー名を指定する。
// defaultvalue: キー名に対応した値がなかった場合の文字列を文字列定数またはHTEXTでしていする。0を指定すると0が戻り値になる。
// 戻り値:取得した値がHTEXTで返る。エラーが発生した場合と値が存在せずデフォルト値に0が指定された場合は0が返る。
int inireadint(char *filename, char *section, char *keyname, int defaultvalue);
// INIファイルから数値を読みだす
BOOL iniwriteint(char *filename, char *section, char *keyname, int value);
// INIファイルに数値を書き込む
HTEXT newobj inireadsection(char *filename, char *section);
// セクションを読み込む
BOOL iniwriteint(char *filename, char *section, char *keyname, int value)
{
char a[30]; itoa(value, a, 10);
return iniwrite(filename, section, keyname, a);
}
#ifdef ENABLESAMPLE
inisample {
title: INIファイルアクセスのサンプルコード
HTEXT text = getfocus();
printf(".INIファイルサンプル\n");
// filename="wzcfg://wzuser.ini"
// section="Settings"
// で読み書き
HTEXT now = textprintf("%d", GetTickCount);
iniwrite(0, 0, "now", now) ;
now = iniread(0, 0, "now", 0);
if(now) printf("now=%s\n", now);
printf("..通常のファイルにアクセス\n");
HTEXT fn = textprintf("%s.ini", __FILE__); // マクロ固有の設定
iniwrite(fn, "tool", "path", \"c:\xxx\yyy\zzz");
HTEXT path = iniread(fn, "tool", "path", \"C:\Program Files\xxx\yyy");
printf("path=%s\n", path);
iniwrite(fn, "tool", "path", 0); // 値を削除
path = iniread(fn, "tool", "path", \"C:\Program Files\xxx\yyy"); // デフォルト値が返るはず
printf("path=%s\n", path);
printf("..int値のアクセス\n");
iniwrite(0, 0, "value", "312");
int v = inireadint(0, 0, "value", -9999);
printf("v=%d\n", v);
iniwrite(0, 0, "value", "abc");
v = inireadint(0, 0, "value", -9999);
printf("v=%d\n", v);
iniwrite(0, 0, "value", 0); // 値を削除
v = inireadint(0, 0, "value", -9999);
printf("v=%d\n", v);
int passcount = inireadint(0, 0, "passcount", 0);
iniwriteint(0, 0, "passcount", passcount + 1);
printf("passcount=%d\n", passcount);
printf("..セクションの内容を表示\n");
HTEXT sec = inireadsection(0, 0);
printf("section=[%s]\n", getdata(sec));
}
#endif // ENABLESAMPLE
// implementation
static HTEXT newobj iniexpandfn(char *filename)
{
wchar *w = wdupfn(filename);
char *s = strdupW(w);
HTEXT fn = dup(s);
free(w); free(s);
return (tosjis(fn, detectkc(fn))) ? fn : 0;
}
HTEXT newobj iniread(char *filename, char *section, char *keyname, char *defaultvalue)
{
HTEXT fn = iniexpandfn(dupstr(filename ? filename : "wzcfg://wzuser.ini"));
if(!fn) return 0;
if(keyname == 0) return 0;
if(istext(keyname)) keyname = getdata(keyname);
HTEXT sec = dupstr(section ? section : "Settings");
HTEXT iv = textprintf("wz6inbaridostl:%ds/123", GetTickCount());
HTEXT dv = defaultvalue ? iv : dupstr(defaultvalue);
char buf[4096];
if(!GetPrivateProfileStringA(getdata(sec), keyname, getdata(dv), buf, sizeof(buf), getdata(fn)))
return 0;
return strcmp(buf, iv) == 0 ? dupstr(defaultvalue) : dupstr(buf);
}
int inireadint(char *filename, char *section, char *keyname, int defaultvalue)
{
char a[30];
HTEXT s = iniread(filename, section, keyname, itoa(defaultvalue, a, 10));
char *p = getdata(s);
strupr(p);
if(!strcmp(p, "ON") || !strcmp(p, "TRUE")) return 1;
if(!strcmp(p, "OFF") || !strcmp(p, "FALSE")) return 0;
double d;
if(atopf(p, &d)) return d; else return defaultvalue;
}
BOOL iniwrite(char *filename, char *section, char *keyname, char *value)
{
HTEXT fn = iniexpandfn(dupstr(filename ? filename : "wzcfg://wzuser.ini"));
if(!fn) return 0;
if(keyname == 0) return 0;
if(istext(keyname)) keyname = getdata(keyname);
HTEXT sec = dupstr(section ? section : "Settings");
HTEXT v = value ? dupstr(value) : 0;
return WritePrivateProfileStringA(getdata(sec), keyname, value ? getdata(v) : 0, getdata(fn));
}
HTEXT newobj inireadsection(char *filename, char *section)
{
HTEXT fn = iniexpandfn(dupstr(filename ? filename : "wzcfg://wzuser.ini"));
if(!fn) return 0;
int bufsize = 64*1024;
char *buf = malloc(bufsize);
HTEXT sec = dupstr(section ? section : "Settings");
if(!GetPrivateProfileSectionA(getdata(sec), buf, bufsize, getdata(fn))) { free(buf); return 0; }
HTEXT ret = new();
char *p = buf;
do{ addf(ret, "%s\n", p); while(*p++) ; } while(*p);
free(buf);
return ret;
}
BOOL iniwriteint(char *filename, char *section, char *keyname, int value)
{
char a[30]; itoa(value, a, 10);
return iniwrite(filename, section, keyname, a);
}
MENU
最新の20件
2020-11-14
2017-12-09
2017-12-02
2017-04-05
2014-05-23
2012-04-14
2011-10-17
2011-12-07
2011-12-02
2011-11-03
2011-10-18
2016-10-18
2016-06-17
2016-05-12
2014-11-25
2014-09-15
2014-05-21
2013-05-04
2012-04-14
人気の10件
- counter: 1445
- today: 1
- yesterday: 0
- online: 3