home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1998 September
/
VPR9809B.ISO
/
APUPDATE
/
VC
/
Tx300d
/
TX300D.LZH
/
TXCFGM.C
< prev
next >
Wrap
C/C++ Source or Header
|
1997-04-05
|
26KB
|
841 lines
// WZ EDITOR 標準機能 拡張子設定テキストファイル入出力
// Copyright 1996-97 TY
// このマクロを使って、拡張子毎の設定の一部を共通にしたりできます。
// このプログラムソースはWZ2.00以降でコンパイルできます。
//2.99D 970327 製品に標準搭載
//2.99D 970327 renew
// WZ2.0/WZ3.0相互変換機能
// LPRINT,CONFIGSHARE入出力機能追加
// WZ2.0でも動作しなければならないので、
// WZ2.0にないAPI(txInsertLine etc)は使えない。
// __WZ__ version
// 0x2000 2.00無印
// 0x2001 2.00A
// 0x2002 2.00B
// 0x2003 2.00C
// 0x2004 2.00D
// 0x2005 2.00E
// 0x2900-0x2999 3.00 alpha/beta
// 0x3000 3.00
//{###設定}
#include <windows.h>
//## base
#if __WZ__ < 0x2900
TX* txAllocText(DWORD mode)
{
// text構造体を確保し、txInitText,txSetFileName(text,NULL)して返す
UINT size = sizeof(TX);
TX* text = malloc(size);
TX* p = text + 1;
if (text) {
txInitText(text);
txSetFileName(text,NULL);// 標準設定を読込む
return text;
}
return NULL;
}
void txFreeText(TX* text)
{
// txAllocTextで得たtextをtxCloseして解放する
if (text) {
txClose(text);
free(text);
}
}
TX* textopen(mchar* szfilename)
{
// szfilenameのファイルをオープンする。
// ファイルの内容を読み込んだtextを返す
// 失敗したらNULLを返す
// テキストを使い終わったら必ずtextcloseしてtextを閉じて下さい。
TX* text = txAllocText(0);
if (text) {
txSetFileName(text,szfilename);
if (txOpenText(text)) {
return text;
}
txFreeText(text);
}
return NULL;
}
void textclose(TX* text)
{
// textopenで開いたテキストを閉じる
txFreeText(text);
}
#endif
//## output
static void define(TX* text)
{
txInsertf(text,"#if __WZ__ >= 0x2900\n");
txInsertf(text," // configFile\n");
txInsertf(text," #define lflpProp configDisuse\n");
txInsertf(text," #define dateGarbage configDisuse\n");
txInsertf(text," #define lfBold2 configDisuse\n");
txInsertf(text," #define fDispKeywordBold fDispKeyword\n");
txInsertf(text," #define fDispTitleBold fDispTitle\n");
txInsertf(text," #define tfSetWidthByWindow tmodeWidth\n");
txInsertf(text," // configShare\n");
txInsertf(text," #define nenvfastopen configDisuse\n");
txInsertf(text," #define fFastOpen configDisuse\n");
txInsertf(text," #define szExtVertical reserved\n");
txInsertf(text," // configLprint\n");
txInsertf(text," #define szLetterHeader szHeader2\n");
txInsertf(text," #define szLetterFooter szFooter2\n");
txInsertf(text,"#endif\n");
}
static void output(BOOL fStd)
{
HWND hwnd = CreateWindow("COMBOBOX",NULL,
WS_CHILDWINDOW,
0,0,0,0,
text1->hwndbase,NULL,text1->hInstance,NULL
);
txConfigOp(text,TXCONFIGOP_EXTENUM,(LPVOID)hwnd);
int nname = SendMessage(hwnd,CB_GETCOUNT,0,0);
BOOL fNull = FALSE;
static mchar sznull[] = ".null";
{
TX _textdst;
TX* text = &_textdst;
TX* txdst = text;
txInitText(text);
{
mchar szfilename[CCHPATHNAME];
strcpy(szfilename,text->szexedir + "txcfgset.c");
#if __WZ__ >= 0x2005 //2.00E以上
if (!fStd) {
pathFullConfig(szfilename,"txcfgset.c");
}
#endif
txSetFileName(text,szfilename);
}
txOpenText(text);
//
static mchar *szauto = "//##auto";
if (txSearchEx(text,szauto,SEARCH_PARATOP|SEARCH_CUR)) {
txSelect(text);
txJumpFileEnd(text);
txSelectDelete(text);
}
//
static mchar *szshare = "void configFileShare(tx* text,mchar* szname)";
txJumpFileTop(text);
if (!txSearchEx(text,szshare,SEARCH_PARATOP|SEARCH_CUR)) {
txJumpFileTop(text);
txInsertf(text,"// 全ての拡張子で共通にしたい内容をここに記述してください\n");
txInsertf(text,"%s\n{\n",szshare);
txInsertf(text,"//\t例\n");
txInsertf(text,"//\ttext->rgbBack = RGB(0,0,0);\t//背景\n");
txInsertf(text,"//\tstrcpy(text->tszformat[SZFORMAT_BOLD_TOP],\"【\");\t//太字書式文字列\n");
txInsertf(text,"}\n\n");
}
//
txJumpFileEnd(text);
txInsertf(text,"%s\n",szauto);
txInsert(text,"// サブファイル1 \"txcfgs1.c\"\n");
txInsert(text,"// サブファイル2 \"txcfgs2.c\"\n");
txInsert(text,"// サブファイル3 \"txcfgs3.c\"\n");
txInsert(text,"// サブファイル4 \"txcfgs4.c\"\n");
txInsert(text,"// サブファイル5 \"txcfgs5.c\"\n");
txInsert(text,"// サブファイル6 \"txcfgs6.c\"\n");
txInsert(text,"// サブファイル7 \"txcfgs7.c\"\n");
txInsert(text,"// サブファイル8 \"txcfgs8.c\"\n");
txInsert(text,"// サブファイル9 \"txcfgs9.c\"\n");
txInsertf(text,"// ここから下のプログラムはWZが作成します\n");
txInsertf(text,"// この部分に記述したプログラムは失われます\n");
//2.99D 970327
define(text);
txInsertf(text,"extern \"txcfgs1\" {\n");
txInsertf(text," BOOL configFile1(TX* text,mchar* szname);\n");
txInsertf(text," BOOL configLprint1(TX* text,mchar* szname);\n");
txInsertf(text,"}\n");
txInsertf(text,"extern \"txcfgs2\" {\n");
txInsertf(text," BOOL configFile2(TX* text,mchar* szname);\n");
txInsertf(text," BOOL configLprint2(TX* text,mchar* szname);\n");
txInsertf(text,"}\n");
txInsertf(text,"extern \"txcfgs3\" {\n");
txInsertf(text," BOOL configFile3(TX* text,mchar* szname);\n");
txInsertf(text," BOOL configLprint3(TX* text,mchar* szname);\n");
txInsertf(text,"}\n");
txInsertf(text,"extern \"txcfgs4\" {\n");
txInsertf(text," BOOL configFile4(TX* text,mchar* szname);\n");
txInsertf(text," BOOL configLprint4(TX* text,mchar* szname);\n");
txInsertf(text,"}\n");
txInsertf(text,"extern \"txcfgs5\" {\n");
txInsertf(text," BOOL configFile5(TX* text,mchar* szname);\n");
txInsertf(text," BOOL configLprint5(TX* text,mchar* szname);\n");
txInsertf(text,"}\n");
txInsertf(text,"extern \"txcfgs6\" {\n");
txInsertf(text," BOOL configFile6(TX* text,mchar* szname);\n");
txInsertf(text," BOOL configLprint6(TX* text,mchar* szname);\n");
txInsertf(text,"}\n");
txInsertf(text,"extern \"txcfgs7\" {\n");
txInsertf(text," BOOL configFile7(TX* text,mchar* szname);\n");
txInsertf(text," BOOL configLprint7(TX* text,mchar* szname);\n");
txInsertf(text,"}\n");
txInsertf(text,"extern \"txcfgs8\" {\n");
txInsertf(text," BOOL configFile8(TX* text,mchar* szname);\n");
txInsertf(text," BOOL configLprint8(TX* text,mchar* szname);\n");
txInsertf(text,"}\n");
txInsertf(text,"extern \"txcfgs9\" {\n");
txInsertf(text," BOOL configFile9(TX* text,mchar* szname);\n");
txInsertf(text," BOOL configLprint9(TX* text,mchar* szname);\n");
txInsertf(text,"}\n");
//
{
int iname = 0;
for (int i = 1;i <= 9;i++) {
mchar szfilename[CCHPATHNAME];
strcpy(szfilename,text->szfilename);
sprintf(pathGetFileName(szfilename),\"txcfgs%d.c",i);
//information(szfilename);
TX* txs = textopen(szfilename);
txDeleteText(txs);
txInsertReturn(txs);
define(txs);
txInsertf(txs,"\nBOOL configFile%d(TX* text,mchar* szname)\n{\n",i);
{
TX* txtmp = textopen(NULL);
// 全部出力すると64KBを越えてしまうので、
// 4個ずつ9つに分けて出力
for (int i = 0;i < 4;i++) {
mchar szname[CCHWORD];
if (iname < nname) {
SendMessage(hwnd,CB_GETLBTEXT,iname,(LPARAM)szname);
strcpy(txtmp->szfilename,szname);
txConfigOp(txtmp,TXCONFIGOP_EXTLOAD,0);
//
txInsertf(txs," if (!stricmp(szname,\"%s\")) {\n",szname);
macroCall("txcfgc.txcfg",NULL,2,txs,txtmp);
txInsertf(txs," return TRUE;\n");
txInsertf(txs," }\n");
//
iname++;
} else {
break;
}
}
textclose(txtmp);
}
txInsertf(txs," return FALSE;\n");
txInsertf(txs,"}\n");
txSave(txs);
textclose(txs);
}
if (iname < nname) {
information("設定が多すぎます。\n全部はテキスト化できませんでした。\n");
}
}
//
txInsertf(text,"// 拡張子毎の設定を作成します\n");
txInsertf(text,"wzcfgFile\n{\n");
// ここはtext1ではだめ
txInsertf(text," TX _text;\n");
txInsertf(text," TX* text = &_text;\n");
txInsertf(text," txInitText(text);\n");
txInsertf(text," txOpenText(text);\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTDELALL,0);\n");
//
txInsertf(text,"\tstatic mchar *tszname[] = {\n");
{
for (int i = 0;i < nname;i++) {
mchar szname[CCHWORD];
SendMessage(hwnd,CB_GETLBTEXT,i,(LPARAM)szname);
txInsertf(text," \"%s\",\n",szname);
}
}
if (!fNull) txInsertf(text," \"%s\",\n",sznull);
txInsertf(text," NULL\n");
txInsertf(text," };\n");
//
txInsertf(text," for (int i = 0;tszname[i];i++) {\n");
txInsertf(text," // for load std\n");
txInsertf(text," txClose(text);\n");
txInsertf(text," txInitText(text);\n");
txInsertf(text," txSetFileName(text,NULL);\n");
txInsertf(text," txOpenText(text);\n");
txInsertf(text," //\n");
txInsertf(text," configFile1(text,tszname[i]);\n");
txInsertf(text," configFile2(text,tszname[i]);\n");
txInsertf(text," configFile3(text,tszname[i]);\n");
txInsertf(text," configFile4(text,tszname[i]);\n");
txInsertf(text," configFile5(text,tszname[i]);\n");
txInsertf(text," configFile6(text,tszname[i]);\n");
txInsertf(text," configFile7(text,tszname[i]);\n");
txInsertf(text," configFile8(text,tszname[i]);\n");
txInsertf(text," configFile9(text,tszname[i]);\n");
txInsertf(text," configFileShare(text,tszname[i]);\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_SAVE,tszname[i]);\n");
txInsertf(text," }\n");
txInsertf(text," txClose(text);\n");
txInsertf(text,"}\n\n");
//2.99D 970327 configShare
{
txInsertf(text,"void configShare(TX* text)\n{\n");
txInsertf(text,"\tTXCONFIGSHARE* shcfg = &text->share->config;\n");
macroCall("txcfgc.txcfgShare",NULL,2,text,&text1->share->config);
txInsertf(text,"}\n\n");
//
txInsertf(text,"// WZ共通基本設定を作成します\n");
txInsertf(text,"wzcfgShare\n{\n");
txInsertf(text,"\tTX* text = text1;\n");
txInsertf(text,"\tconfigShare(text);\n");
txInsertf(text,"\ttxConfigOp(text,TXCONFIGOP_SHARESAVE,0);\n");
txInsertf(text,"}\n\n");
}
//2.99D 970327 LPRINT
{
txConfigOp(text,TXCONFIGOP_PRINTENUM,(LPVOID)hwnd);
int nlp = SendMessage(hwnd,CB_GETCOUNT,0,0);
int ilp = 0;
for (int i = 1;i <= 9;i++) {
mchar szfilename[CCHPATHNAME];
strcpy(szfilename,text->szfilename);
sprintf(pathGetFileName(szfilename),\"txcfgs%d.c",i);
//information(szfilename);
TX* txs = textopen(szfilename);
txJumpFileEnd(txs);
txInsertf(txs,"\nBOOL configLprint%d(TX* text,mchar* szname)\n{\n",i);
txInsertf(txs," LPRINT* lp = text->lp;\n");
// 4個ずつ出力
for (int i = 0;i < 4;i++) {
mchar szname[CCHWORD];
if (ilp < nlp) {
SendMessage(hwnd,CB_GETLBTEXT,ilp,(LPARAM)szname);
txConfigOp(txs,TXCONFIGOP_PRINTREAD,szname);
txInsertf(txs," if (!stricmp(szname,\"%s\")) {\n",szname);
macroCall("txcfgc.txcfgLprint",NULL,2,txs,txs->lp);
txInsertf(txs," return TRUE;\n");
txInsertf(txs,"\t}\n");
//
ilp++;
} else {
break;
}
}
txInsertf(txs," return FALSE;\n");
txInsertf(txs,"}\n");
txSave(txs);
textclose(txs);
}
if (ilp < nlp) {
information("印刷スタイルが多すぎます。\n全部はテキスト化できませんでした。\n");
}
//
txInsertf(text,"// 印刷スタイルの設定を作成します\n");
txInsertf(text,"wzcfgLprint\n{\n");
txInsertf(text," TX* text = text1;\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_PRINTDELALL,0);\n");
//
txInsertf(text," static mchar *tszname[] = {\n");
for (int ilp = 0;ilp < nlp;ilp++) {
mchar szname[CCHWORD];
SendMessage(hwnd,CB_GETLBTEXT,ilp,(LPARAM)szname);
txInsertf(text," \"%s\",\n",szname);
}
txInsertf(text," NULL\n");
txInsertf(text," };\n");
//
txInsertf(text," int i;\n");
txInsertf(text," for (i = 0;tszname[i];i++) {\n");
txInsertf(text," configLprint1(text,tszname[i]);\n");
txInsertf(text," configLprint2(text,tszname[i]);\n");
txInsertf(text," configLprint3(text,tszname[i]);\n");
txInsertf(text," configLprint4(text,tszname[i]);\n");
txInsertf(text," configLprint5(text,tszname[i]);\n");
txInsertf(text," configLprint6(text,tszname[i]);\n");
txInsertf(text," configLprint7(text,tszname[i]);\n");
txInsertf(text," configLprint8(text,tszname[i]);\n");
txInsertf(text," configLprint9(text,tszname[i]);\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_PRINTWRITE,tszname[i]);\n");
txInsertf(text," }\n");
txInsertf(text,"}\n\n");
}
//
txInsertf(text,"main\n");
txInsertf(text,"{\n");
#if __WZ__ >= 0x2994
txInsert(text," text->share->fNoPathSearchMacroTxcfgs++;\n");
#endif
txInsertf(text," wzcfgShare();\n");
txInsertf(text," wzcfgFile();\n");
txInsertf(text," wzcfgLprint();\n");
#if __WZ__ >= 0x2994
txInsert(text," text->share->fNoPathSearchMacroTxcfgs--;\n");
#endif
#if 1//2.99G 970405 TEXT_HTMLをセットしないとHTMLファイルがHTMLとして認識されない
// HTML
txInsertf(text," {\n");
txInsertf(text," mchar* sz = \"HTMLファイル\";\n");
txInsertf(text," if (txConfigOp(text,TXCONFIGOP_EXTNAME_SEARCH,sz)) {\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_LOAD,sz);\n");
txInsertf(text," text->filekind = TEXT_HTML;\n");
txInsertf(text," text->fDispTag = TRUE;\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_SAVE,sz);\n");
txInsertf(text," }\n");
txInsertf(text," }\n");
txInsertf(text," {\n");
txInsertf(text," mchar* sz = \".HTML\";\n");
txInsertf(text," if (txConfigOp(text,TXCONFIGOP_EXTNAME_SEARCH,sz)) {\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_LOAD,sz);\n");
txInsertf(text," text->filekind = TEXT_HTML;\n");
txInsertf(text," text->fDispTag = TRUE;\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_SAVE,sz);\n");
txInsertf(text," }\n");
txInsertf(text," }\n");
txInsertf(text," {\n");
txInsertf(text," mchar* sz = \".HTM\";\n");
txInsertf(text," if (txConfigOp(text,TXCONFIGOP_EXTNAME_SEARCH,sz)) {\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_LOAD,sz);\n");
txInsertf(text," text->filekind = TEXT_HTML;\n");
txInsertf(text," text->fDispTag = TRUE;\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_SAVE,sz);\n");
txInsertf(text," }\n");
txInsertf(text," }\n");
// .C
txInsertf(text," {\n");
txInsertf(text," mchar* sz = \"Cプログラム\";\n");
txInsertf(text," if (txConfigOp(text,TXCONFIGOP_EXTNAME_SEARCH,sz)) {\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_LOAD,sz);\n");
txInsertf(text," text->filekind = TEXT_C;\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_SAVE,sz);\n");
txInsertf(text," }\n");
txInsertf(text," }\n");
txInsertf(text," {\n");
txInsertf(text," mchar* sz = \".C\";\n");
txInsertf(text," if (txConfigOp(text,TXCONFIGOP_EXTNAME_SEARCH,sz)) {\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_LOAD,sz);\n");
txInsertf(text," text->filekind = TEXT_C;\n");
txInsertf(text," txConfigOp(text,TXCONFIGOP_EXTNAME_SAVE,sz);\n");
txInsertf(text," }\n");
txInsertf(text," }\n");
#endif
txInsert(text," information(\"設定を読み込みました。\\n新しい設定は次に開くファイルから有効になります。\\n今現在開いているWZの窓の設定は古いままです。\\nこの窓で設定を行うと古い設定が保存されるので注意してください。\");\n");
txInsertf(text,"}\n");
//
txSave(text);
txClose(text);
}
DestroyWindow(hwnd);
}
//## create macro
void num(tx* text,mchar *sz,long data)
{
txInsertf(text,"\t\t%s = %d;\n",sz,data);
}
void numRGB(tx* text,mchar *sz,long data)
{
txInsertf(text,"\t\t%s = RGB(%d,%d,%d);\n",sz,GetRValue(data),GetGValue(data),GetBValue(data));
}
static int inttohex(int c)
{
if (c >= 10) return c - 10 + 'A';
return c + '0';
}
static mchar* mystrtoesc(mchar *szstr)
{
// 制御文字を\によるエスケープ文字に変換します
// タブ->'\t'、改行(CR+LF)->'\n'に変換します。
// "0x01" - "0x1F"は"\x01" - "\x1F"に変換します。
// szstrを返します
// 文字列の長さが長くなりますので、szstrのバッファサイズは十分な大きさをとって下さい
mchar *src = szstr;
mchar szbuff[CCHLINE];
mchar *dst = szbuff;
int c;
while(c = *src++) {
if (iskanji(c)) {
*dst++ = c;
*dst++ = *src++;
} else if (c == '\t') {
*dst++ = '\\';
*dst++ = 't';
} else if (c == '\\') {//2.99D 970328
*dst++ = '\\';
*dst++ = '\\';
} else if (c == '\"') {//2.99D 970328
*dst++ = '\\';
*dst++ = '\"';
} else if (c == 0x0D && *src == 0x0D) {
*dst++ = '\\';
*dst++ = 'n';
src++;
} else if (c < 0x20) {
*dst++ = '\\';
*dst++ = 'x';
*dst++ = inttohex(c / 16);
*dst++ = inttohex(c & 0x0F);
} else {
*dst++ = c;
}
}
*dst = 0;
strcpy(szstr,szbuff);
return szstr;
}
void str(tx* text,mchar *sz,mchar* szdata)
{
#if 1 //2.99D 970327 パス区切りの'\'がそのままだった。
// '\' -> '\\','"'->'\"'に変える
// バイナリ文字は"\xXX"に変える
#if __WZ__ < 0x2900
// WZ2.0ではtszformatでタブが\tのように入っている
if (strimatch(sz,"text->tszformat")) {
// そのまま出力
txInsertf(text,"\t\tstrcpy(%s,",sz);
txInsertf(text,"\"%s\");\n",szdata);
return;
}
#endif
mchar buff[CCHLINE];
strcpy(buff,szdata);
mystrtoesc(buff);
//
txInsertf(text,"\t\tstrcpy(%s,",sz);
txInsertf(text,"\"%s\");\n",buff);
#else
mchar buff[CCHLINE];
strcpy(buff,szdata);
strtoesc(buff);
txInsertf(text,"\t\tstrcpy(%s,\"%s\");\n",sz,buff);
#endif
}
static BOOL _num(tx* txdst,mchar* szContext,mchar* p,int len)
{
BOOL frgb = !strnicmp(p,"COLORREF",len);
p += len;
p = strGetWordTop(p);
mchar* p1 = strchrs(p,";:");
if (!p1) return FALSE;
len = p1 - p;
//
mchar szid[CCHWORD];
strcpylen(szid,p,len);
if (strmatch(szid,"reserved")) return FALSE;
int n = 1;
#if 1//2.99D 970327
if (strmatch(szid,"t") && strstr(szid,"[DISPSTYLEMODE_N]")) {
mchar* p = strchr(szid,'[');
if (p) *p = 0;
n = DISPSTYLEMODE_N;
}
#else
if (
strmatch(szid,"twidth[") ||
strmatch(szid,"theight[") ||
strmatch(szid,"tcyint[") ||
strmatch(szid,"tfPageTurn[") ||
strmatch(szid,"tfVertical[") ||
strmatch(szid,"tfSetWidthByWindow[") ||
strmatch(szid,"tmodeWs[") ||
strmatch(szid,"tlcxWindowDefault[") ||
strmatch(szid,"tlcyWindowDefault[")
) {
mchar* p = strchr(szid,'[');
if (p) *p = 0;
n = DISPSTYLEMODE_N;
}
#endif
if (n >= 2) {
int i;
for (i = 0;i < n;i++) {
txInsertf(txdst,"\tnum(txdst,\"%s%s[%d]\",%s%s[%d]);\n",
szContext,szid,i,
szContext,szid,i
);
}
} else {
txInsertf(txdst,"\tnum%s(txdst,\"%s%s\",%s%s);\n",
frgb ? "RGB" : "",
szContext,
szid,
szContext,
szid
);
}
return TRUE;
}
static BOOL _str(tx* txdst,mchar* szContext,mchar* p,int len)
{
p += len;
p = strGetWordTop(p);
mchar* p1 = strchr(p,'[');
if (!p1) return FALSE;
len = p1 - p;
//
mchar szid[CCHWORD];
strcpylen(szid,p,len);
if (strmatch(szid,"reserved")) return FALSE;
int n = 1;
if (strmatch(szid,"tsztitle")) {
n = SZTITLE_N;
} else if (strmatch(szid,"tszformat")) {
n = FORMAT_N;
} else if (strmatch(szid,"tszhelp")) {
n = HELP_N;
} else if (strmatch(szid,"szenvinclude")) {//2.99D 970327
n = 2;
} else if (strmatch(szid,"szPathTxpcode")) {//2.99D 970327
n = 2;
}
if (n >= 2) {
int i;
for (i = 0;i < n;i++) {
txInsertf(
txdst,
"\tstr(txdst,\"%s%s[%d]\",%s%s[%d]);\n",
szContext,szid,i,
szContext,szid,i
);
}
} else {
txInsertf(
txdst,
"\tstr(txdst,\"%s%s\",%s%s);\n",
szContext,szid,
szContext,szid
);
}
return TRUE;
}
static void fontstyle(TX* txdst,mchar* szContext,int n)
{
for (int i = 0;i < n;i++) {
txInsertf(txdst,"\tstr(txdst,\"%stFontstyle[%d].tlfFaceName[IFONT_STD]\",%stFontstyle[%d].tlfFaceName[IFONT_STD]);\n",szContext,i,szContext,i);
txInsertf(txdst,"\tstr(txdst,\"%stFontstyle[%d].tlfFaceName[IFONT_ANK]\",%stFontstyle[%d].tlfFaceName[IFONT_ANK]);\n",szContext,i,szContext,i);
txInsertf(txdst,"\tnum(txdst,\"%stFontstyle[%d].tlfHeight[IFONT_STD]\",%stFontstyle[%d].tlfHeight[IFONT_STD]);\n",szContext,i,szContext,i);
txInsertf(txdst,"\tnum(txdst,\"%stFontstyle[%d].tlfHeight[IFONT_ANK]\",%stFontstyle[%d].tlfHeight[IFONT_ANK]);\n",szContext,i,szContext,i);
txInsertf(txdst,"\tnum(txdst,\"%stFontstyle[%d].perNline\",%stFontstyle[%d].perNline);\n",szContext,i,szContext,i);
txInsertf(txdst,"\tnum(txdst,\"%stFontstyle[%d].modeAlign\",%stFontstyle[%d].modeAlign);\n",szContext,i,szContext,i);
txInsertf(txdst,"\tnum(txdst,\"%stFontstyle[%d].fBold\",%stFontstyle[%d].fBold);\n",szContext,i,szContext,i);
txInsertf(txdst,"\tnum(txdst,\"%stFontstyle[%d].fItalic\",%stFontstyle[%d].fItalic);\n",szContext,i,szContext,i);
txInsertf(txdst,"\tnum(txdst,\"%stFontstyle[%d].fUnderline\",%stFontstyle[%d].fUnderline);\n",szContext,i,szContext,i);
}
}
static BOOL processline(TX* text,TX* txdst,txstr szline,mchar* szContext)
{
mchar*p = szline;
BOOL fout = FALSE;
if (
*p == '\t' ||
strmatch(p,"BBOOL fMyColor") //2.99D 970328
) {
if (*p == '\t') p++;
int len;
if (
(len = strmatch(p,"BBOOL")) ||
(len = strmatch(p,"BOOL")) ||
(len = strmatch(p,"BYTE")) ||
(len = strmatch(p,"WORD")) || //2.99D 970327 for shcfg
(len = strmatch(p,"SIGNED_WORD")) ||
(len = strmatch(p,"COLORREF")) ||
(len = strmatch(p,"SEARCHMODE"))
) {
fout = _num(txdst,szContext,p,len);
} else if (
(len = strmatch(p,"mchar")) ||
(len = strmatch(p,"UCHAR"))
) {
fout = _str(txdst,szContext,p,len);
}
#if __WZ__ >= 0x2900
if (len = strmatch(p,"DIRECTORYATR")) {//2.99D 970327
int i;
for (i = 0;i < DIRECTORYATR_N;i++) {
txInsertf(txdst,"\tstr(txdst,\"%stDirAtr[%d].szDirectory\",%stDirAtr[%d].szDirectory);\n",
szContext,i,
szContext,i
);
txInsertf(txdst,"\tnum(txdst,\"%stDirAtr[%d].kc\",%stDirAtr[%d].kc);\n",
szContext,i,
szContext,i
);
txInsertf(txdst,"\tnum(txdst,\"%stDirAtr[%d].cr\",%stDirAtr[%d].cr);\n",
szContext,i,
szContext,i
);
}
}
#endif
if (len = strmatch(p,"FONTSTYLE")) {//2.99D 970328
int n;
if (!stricmp(szContext,"lp->")) {
n = FONTTX_H6;
} else {
n = FONTTX_N;
}
fontstyle(txdst,szContext,n);
}
}
#if 0// for DEBUG
if (!fout) printf("%s\n",szline);
#endif
if (!txNextPara(text)) return FALSE;
return TRUE;
}
BOOL TXAPI txcfgWrite(BOOL fStd)
{
// fStd=TRUE:\wzに出力
// fStd=FALSE:pathFullConfigに出力
TX _textdst;
TX* text = &_textdst;
TX* txdst = text;
txInitText(text);
txSetFileName(text,text->szexedir + \"std\txcfgc.c");
txOpenText(text);
txDeleteText(text);
txInsert(text,"extern \"txcfgm\" {\n");
txInsert(text,"\tvoid num(tx* text,mchar *sz,long data);\n");
txInsert(text,"\tvoid numRGB(tx* text,mchar *sz,long data);\n");
txInsert(text,"\tvoid str(tx* text,mchar *sz,mchar* szdata);\n");
txInsert(text,"}\n");
// config
txInsert(text,"void txcfg(tx* txdst,tx* text)\n{\n");
{
TX* text = textopen(txdst->szexedir + \"std\_text.h");
if (text) {
if (txSearchEx(text,"configFileTop",0)) {
BOOL fac = FALSE;
txstr szline;
while(1) {
txGetLine(text,szline);
if (strmatch(szline,"BYTE configExtEnd;")) break;
#if __WZ__ < 0x2900
#if __WZ__ >= 0x2002 // WZ2.00B以上
if (strmatch(strGetWordTop(szline),"WORD")) {
BOOL fSkip = FALSE;
if (strstr(szline,"reservedAc")) {
fac = TRUE;
fSkip = TRUE;
} else if (fac && strstr(szline,"fAc")) {
fSkip = TRUE;
}
if (fSkip) {
if (!txNextPara(text)) break;
continue;
}
}
#endif
#endif
if (!processline(text,txdst,szline,"text->")) break;
}
fontstyle(txdst,"text->",FONTTX_N); //2.99D 970328 tFontstyle
}
textclose(text);
}
}
txInsert(text,"}\n");
// LPRINT
txInsert(text,"void txcfgLprint(TX* txdst,LPRINT* lp)\n{\n");
{
TX* text = textopen(txdst->szexedir + \"std\_text.h");
if (text) {
if (txSearchEx(text,"} LPRINT;",0)) {
if (txSearchEx(text,"configTop",SEARCH_PREV)) {
txstr szline;
while(1) {
txGetLine(text,szline);
if (strmatch(szline,"BYTE configEnd;")) break;
if (!processline(text,txdst,szline,"lp->")) break;
}
}
}
textclose(text);
}
}
txInsert(text,"}\n");
// TXCONFIGSHARE
txInsert(text,"void txcfgShare(TX* txdst,TXCONFIGSHARE* shcfg)\n{\n");
{
TX* text = textopen(txdst->szexedir + \"std\_text.h");
if (text) {
static mchar szEnd[] = "} TXCONFIGSHARE;";
if (txSearchEx(text,szEnd,0)) {
if (txSearchEx(text,"__BINCOMPATIBLE__",SEARCH_PREV)) {
BOOL fev = FALSE;
txNextPara(text);
txstr szline;
while(1) {
txGetLine(text,szline);
if (strmatch(szline,szEnd)) break;
#if __WZ__ >= 0x2005 // WZ2.00E以上
if (strmatch(strGetWordTop(szline),"mchar")) {
BOOL fSkip = FALSE;
if (strstr(szline,"szExtVertical")) {
fev = TRUE;
fSkip = TRUE;
} else if (fev && strstr(szline,"szPathTxpcode")) {
fSkip = TRUE;
} else if (fev && strstr(szline,"szExtGroup")) {
fSkip = TRUE;
}
if (fSkip) {
if (!txNextPara(text)) break;
continue;
}
}
#endif
if (!processline(text,txdst,szline,"shcfg->")) break;
}
}
}
textclose(text);
}
}
txInsert(text,"}\n");
//
txSave(text);
txClose(text);
//
output(fStd);
return TRUE;
}
writeStd
{
return txcfgWrite(TRUE);
}
main
{
// 現在の拡張子毎の設定を、拡張子設定テキストファイル
// "txcfgset.c","txcfgs?.c"
// に出力します。
// "txcfgset.main"コマンドを実行するか、txcfgset.cを開いて[マクロ]-[テキストを実行]
// すると、現在の設定を変更します。
// 拡張子設定テキストファイルを別ファイルにコピーすることによって設定を安全な形で取っておいたり、
// 全ての拡張子で共通にしたい内容を簡単に指定することができます。
// なお、一部設定が出力されない場合があるかもしれません。
// シングル版ではwz:\に、ネットワーク版ではユーザ毎のフォルダに出力されます。
txcfgWrite(FALSE);
}