home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1999 February
/
VPR9902A.BIN
/
APUPDATE
/
VC
/
Tx300d
/
TX300D.LZH
/
MACRO.C
< prev
next >
Wrap
C/C++ Source or Header
|
1997-06-15
|
22KB
|
848 lines
// WZ EDITOR 標準機能 マクロ
// Copyright 1995-96 TY
//{###マクロ}
#include <windows.h>
#include <windowsx.h>
#include "dialog.h"
#include "config.h"
#if 1//2.90
#include "apidb2.h"
#else
#include "apidb.h"
#endif
BOOL TXAPIBASE callPost(mchar* szmacro)
{
// callと同じ様にszmacroのマクロを呼び出します。
// callと異なる点は、PostMessageを使って呼び出す点です。
// このためszmacroの実行は、callPostを呼び出してすぐでなく、アイドル時に行われます。
// また、マクロ実行の返り値は取れません。
// 実行が出来るかどうかを返します。
//1.01A で追加
return PostMessage(txGetFrameNow()->hwndbase,WM_TXCALL,0,(LPARAM)szmacro);//2.99C 970324 text1->txGetFrameNow()
}
static mchar* GetTestMacro(void)
{
mchar *sztest = text->share->config.szmacrotest;
if (!sztest[0]) {
attention("テストマクロが登録されていません。\n[ツール]-[設定]-[マクロ]-[テストマクロ]で登録してください。");
return NULL;
}
return sztest;
}
testOpen
{
// テストマクロを開く
#if 1//2.95 970128
mchar *sztest = GetTestMacro();
if (!sztest) return FALSE;
mchar szfilename[CCHPATHNAME];
strcpy(szfilename,sztest);
mchar* szExt = pathGetExt(szfilename);
mchar szfuncname[CCHPATHNAME] = {0};
if (*szExt) {
sprintf(szfuncname,"/s%s",szExt+1);
*szExt = 0;
}
pathAuto(szfilename,text->share->config.szenvtxpath,".txc;.c");
//information("%s %s",szfilename,szfuncname);
forksw(szfilename,szfuncname);
return TRUE;
#else
mchar *sztest = GetTestMacro();
if (!sztest) return FALSE;
txOpenForkFast(text,sztest);
return TRUE;
#endif
}
BOOL TXCMDBASE uiConfigTest(TX* text)
{
// テストマクロの設定
TXCONFIGSHARE *shcfg = &text->share->config;
HDIALOG hd = dialog("テストマクロの設定");
dialogGroup(hd,"テストマクロ");
dialogControlHelp(hd,123);
dialogCaption(hd,"テストマクロ(&T):");
dialogStrC(hd,NULL,shcfg->szmacrotest,0,CCHWORD,28);
dialogControlHelp(hd,124);
dialogCheckB(hd,"テキストを保存してからテスト",&shcfg->fsave_at_macrotest);
dialogGroupEnd(hd);
dialogLFV(hd);
dialogOK(hd,12);
int id = dialogCmd(hd,"編集(&E)",12);
dialogCancel(hd,12);
int ret = dialogOpen(hd);
if (ret) {
#if 1
shcfgSavePartArray(szmacrotest);
shcfgSavePart(fsave_at_macrotest);
#else
txConfigOp(text,TXCONFIGOP_SHARESAVE,0);
#endif
if (ret == id) testOpen();
return TRUE;
}
return FALSE;
}
BOOL TXCMDBASE test(TX* text)
{
// テストマクロを実行
mchar *sztest = GetTestMacro();
if (!sztest) return FALSE;
if (text->share->config.fsave_at_macrotest && text->fEdit) {
if (!txSave(text)) return FALSE;
}
// オートセーブを無効にする。
// マクロがどんな動作をしても平気な様に
text->fAutoSave = FALSE;
// コマンドラインを設定
mchar buff[CCHPATHNAME*2];
sprintf(buff,"\"%s\" /F\"%s\" /d /Y%d /i",text->szfilename,sztest,text->ly);
#if 1//2.99D 970330 sw
if (text->fClip) {
sprintf(buff + strlen(buff)," /cl%u,%lu,%lu",txSelectGetMode(text),text->clipcur0,txGetAddress(text));
} else { // for jump current position
sprintf(buff + strlen(buff)," /cl0,%lu",txGetAddress(text));
}
#else
if (text->fClip) {
sprintf(buff + strlen(buff)," /S%u,%lu,%lu",txSelectGetMode(text),text->clipcur0,txGetAddress(text));
} else { // for jump current position
sprintf(buff + strlen(buff)," /S0,%lu",txGetAddress(text));
}
#endif
// 閉じる
txClose(text);
// 起動
//3.00B2 970615 txOpenFast->txOpen
// txOpenで同期起動しないと、起動し終わる前にtxQuitが実行されて
// 変になることがある。
if (!txOpen(text,buff)) {
attention("テストマクロを起動できません");
}
// 自分自身は終了
txQuit(text);
return;
#if 0 //2.95 970128 旧コード
#if 1
//1.01A WZ32で高速オープンONでテストマクロを実行すると問題があった
//1.01A テストマクロ実行で、範囲選択状態が失われないようにした
mchar buff[CCHPATHNAME+CCHPATHNAME];
sprintf(buff,"\"%s\" /F\"%s\" /d /Y%d /i",text->szfilename,sztest,text->ly);
if (text->fClip) {
sprintf(buff + strlen(buff)," /cl%u,%lu,%lu",txSelectGetMode(text),text->clipcur0,txGetAddress(text));
} else { // for jump current position
sprintf(buff + strlen(buff)," /cl0,%lu",txGetAddress(text));
}
//information(buff);
// openされてないことにする
SendMessage(text->hwndbase,WM_TXCLOSE,0,0);//1.99A outlineウィンドウを閉じる
if (!txClose(text)) return;
text->szfilename[0] = 0;
SetWindowText(text->hwndbase,"");
#if 1//1.92 遅いから元に戻した
if (!wzExec(buff)) {
attention("テストマクロを起動できません");
}
#else
// txOpenFastでテストマクロ実行窓が開くまで待つようにした
if (!txOpenFast(text,buff)) {
attention("テストマクロを起動できません");
}
#endif
// 自分自身は終了
txQuit(text);
return;
#else
mchar szfilename[CCHPATHNAME];
strcpy(szfilename,text->szfilename);
// openされてないことにする
if (!txClose(text)) return;
text->szfilename[0] = 0;
SetWindowText(text->hwndbase,"");
//
mchar buff[CCHPATHNAME+CCHPATHNAME];
sprintf(buff,"\"%s\" --F\"%s\"",szfilename,sztest);
//1.00H2
if (!wzExec(buff)) {
attention("テストマクロを起動できません");
return;
}
// 自分自身は終了
txQuit(text);
return;
#endif
#endif
}
testInternal
{
// テキストの再読み込みをしないでテストマクロを実行します。
// 2回目にこれを実行すると、テストマクロを更新していても以前に実行したテストマクロが実行されます。
// これを回避するには、[マクロ]-[再読み込み]を実行してから、このコマンドを実行してください。
//1.91A で追加
mchar *sztest = GetTestMacro();
if (!sztest) return FALSE;
if (text->share->config.fsave_at_macrotest && text->fEdit) {
if (!txSave(text)) return FALSE;
}
// オートセーブを無効にする。
// マクロがどんな動作をしても平気な様に
text->fAutoSave = FALSE;
//
call(sztest);
}
int keymacroQ(mchar *szkey)
{
HDIALOG hd = dialog("キー操作の記録");
dialogCaption(hd,szkey + " に登録します。よろしいですか?");
dialogSetH(hd);
int idreg = dialogCmd(hd,"登録",15);
int idcont = dialogCmd(hd,"継続",15);
int idbreak = dialogCmd(hd,"中止",15);
int ret;
if (ret = dialogOpen(hd)) {
if (ret == idreg) return IDYES;
if (ret == idbreak) return IDNO;
}
return IDCANCEL;
}
BOOL TXCMDBASE textRegApidb(TX* text)
{
// テキストをAPIDBに登録
mchar szfilename[CCHPATHNAME];
mchar szsrcname[CCHPATHNAME];
if (text->szfilename[0] == 0) {
attention("新規ファイルは登録できません");
return;
}
statprintf("APIDBに登録中...");
strcpy(szsrcname,text->szfilename);
pathSetExt(szsrcname,NULL);
macroGetFullFileName(szsrcname,szfilename);
#if 1//2.90
apidb2TakeinFile(szfilename);
apidb2FlushCache();
#else
apidbOpen();
apidbFlushFile(szfilename);
apidbClose();
#endif
statprintf("APIDBに登録完了");
}
BOOL TXCMDBASE uiExec(TX* text)
{
//マクロコマンドを入力/実行
//"test"のようにマクロファイル名を指定するとtestのmain関数を、
//"test.func"の用にファイル名と関数名を指定するとその関数を実行します
//1.00Cで追加
HDIALOG hd = dialog("実行マクロ");
txstr szstr;
dialogStr(hd,"マクロ:",szstr,5,20);
dialogIndent(hd,6);
dialogCaption(hd,"実行するマクロを指定してください");
dialogCaption(hd,"<例>\"test\":testマクロのmain関数を実行");
dialogCaption(hd,"<例>\"test.func\":testマクロのfunc関数を実行");
if (dialogOpen(hd)) call(szstr);
return TRUE;
}
//{###表示}
typedef unsigned char Uchar;
typedef unsigned short Ushort;
WORD TXAPI sjis2jis(BYTE iCode1,BYTE iCode2)
{
// SJISコードからJISコードに変換
//1.00DでAPIに追加
Uchar iByte1; /*JISコード1バイト目 */
Uchar iByte2; /*JISコード2バイト目 */
Ushort irtn; /*リターンコード */
if ( iCode2 < 0x9f ) {
if ( iCode1 < 0xe0 ) {
iByte1 = ( iCode1 - 0x71 ) * 2 + 1;
}
else {
iByte1 = ( iCode1 - 0xb1 ) * 2 + 1;
}
iByte2 = iCode2 - 0x1f;
if ( iCode2 >= 0x80 ) {
iByte2 -= 0x01;
}
}
else {
if ( iCode1 < 0xe0 ) {
iByte1 = ( iCode1 - 0x70 ) * 2;
}
else {
iByte1 = ( iCode1 - 0xb0 ) * 2;
}
iByte2 = iCode2 - 0x7e;
}
irtn = (Ushort )(( iByte1 << 8 ) | iByte2 );
return irtn;
}
WORD TXAPI jis2kuten(WORD iCode)
{
// JISコードから区点コードに変換
//1.00DでAPIに追加
Ushort irtn;
Uchar iByte1 ,iByte2;
Uchar szHenkan[5];
iCode = iCode - 0x2020;
iByte1 = ( iCode >> 8 ) & 0xff;
iByte2 = iCode & 0xff;
sprintf(szHenkan ,"%02d",iByte1 );
sprintf(&szHenkan[2] ,"%02d",iByte2 );
irtn = atoi( szHenkan );
return irtn;
}
uiDispCharCode
{
// 文字コード表示
// カーソル位置の文字コードのShift-JISおよびJISコードを調べる
// thanks Toru Nagashimaさん
//{#VZ} ^KJ
Uchar iCode1; /*漢字コード上1バイトの値 */
Uchar iCode2; /*漢字コード下1バイトの値 */
Ushort iCode3; /*JISコード変換後の値 */
Ushort iCode4; /*区点コード変換後の値 */
TXCHAR szCode; /*文字コード入力バッファ */
szCode = getchar; /*文字コード取得 */
if( txchIsKanji( szCode ) ) {
/*漢字の場合の処理*/
iCode1 = ( szCode >> 8 ) & 0xff;
iCode2 = szCode & 0xff;
iCode3 = sjis2jis( iCode1 ,iCode2 );
iCode4 = jis2kuten( iCode3 );
information("文字 [%c]\n SJIS [%X]\n JIS [%X]\n 区点 [%04d]",szCode ,szCode ,iCode3 ,iCode4 );
} else if ( szCode >= 0 && szCode <= 0x1f || szCode == 0x7f ) {
/*制御文字の場合の処理*/
information("文字 [ ]\n ASCII [%02X]\n",szCode ,szCode );
} else if ( szCode == 0x0d0a ) {
/*制御文字(復改)の場合の処理*/
information("文字 [ ]\n ASCII [%04X]\n",szCode ,szCode );
} else {
/*表示可能文字の場合の処理*/
information("文字 [%c]\n ASCII [%02X]\n",szCode ,szCode );
}
}
//{###マクロ}
//1.90 usermenuから移動
macrohelp
{
txOpenForkExFast(text,text->szexedir + "std\\txc.txt -v");
}
BOOL TXCMDBASE textCompile(TX* text)
{
// テキストをコンパイル
PostMessage(text->hwndbase,WM_COMMAND,IDM_TXMACROCOMPILETEXT,0);
return TRUE;
}
BOOL TXCMDBASE textCompile16(TX* text)
{
// テキストをTX-C16でコンパイル
PostMessage(text->hwndbase,WM_COMMAND,IDM_TXMACROCOMPILETEXT,16);
return TRUE;
}
BOOL TXCMDBASE textCompile32(TX* text)
{
// テキストをTX-C32でコンパイル
#if 1
PostMessage(text->hwndbase,WM_COMMAND,IDM_TXMACROCOMPILETEXT,32);
return TRUE;
#else
#ifdef __FLAT__
PostMessage(text->hwndbase,WM_COMMAND,IDM_TXMACROCOMPILETEXT,32);
return TRUE;
#else
information("WZ16ではTX-PCODE32のコンパイルはできません");
return FALSE;
#endif
#endif
}
BOOL TXCMDBASE textDump(TX* text)
{
// テキストのTX-PCODEをstdoutへダンプ出力
PostMessage(text->hwndbase,WM_COMMAND,IDM_TXMACRODUMPTEXT,0);
return TRUE;
}
BOOL TXCMDBASE textExec(TX* text)
{
// テキストのmainマクロを実行
PostMessage(text->hwndbase,WM_COMMAND,IDM_TXMACROFORKTEXT,0);
return TRUE;
}
//##ツールの追加
#define IDD_EXPLAIN 1001
#define IDD_COMMANDS 1002
#define IDD_FILENAME 1003
#define IDD_REFER 1004
typedef struct {
mchar szfilename[CCHPATHNAME];
mchar szfiles[CCHPATHNAME];
mchar szsrcfiles[CCHPATHNAME];
tx* text;
HWND hwnd;
int fNoEdit; // 再入防止
} INSTALLCONTEXT;
static void install_explainFromText(INSTALLCONTEXT* context)
{
HWND hctrl = GetDlgItem(context->hwnd,IDD_EXPLAIN);
ListBox_ResetContent(hctrl);
tx* text = context->text;
//3.00A4 970509 //{$FILE},//{$SOURCE}指定は、モジュールの説明部分で行う必要があります。そうしないと指定しても無視されます。
txstr szfiles; // {$FILE}指定があったときは、その指定が入る
txstr szsrcfiles; // {$SOURCE}指定があったときは、その指定が入る
//
txstr szline;
mchar buff[CCHLINE];
int i = 0;
txJumpFileTop(text);
for (;;i++) {
txGetLine(text,szline);
mchar *p = szline;
p = strGetWordTop(p);
if (*p == '/' && p[1] == '/') {
if (p[2] == '/' || (p[2] == '{' && p[3] != '$')) {
// "///","//{"は除く
//2.95 970131 "//{$"は除いてはいけなかった
} else {
int len;
p += 2;
p = strGetWordTop(p);
if (i == 0) {
sprintf(buff,"%s(%s)",p,pathGetFileName(context->szfilename));
ListBox_AddString(hctrl,buff);
} else if (len = strimatch(p,"{$FILE}")) {
szfiles = p + len;
} else if (len = strimatch(p,"{$SOURCE}")) {
szsrcfiles = p + len;
} else {
sprintf(buff," %s",p);
ListBox_AddString(hctrl,buff);
}
}
} else {
break;
}
if (!txNextPara(text)) break;
}
strcpymax(context->szfiles,szfiles,CCHPATHNAME);
strcpymax(context->szsrcfiles,szsrcfiles,CCHPATHNAME);
ListBox_SetCurSel(hctrl,0);
}
static void install_cmdsFromText(INSTALLCONTEXT* context,BOOL fSave)
{
tx* text = context->text;
HWND hctrl = NULL;
TXMENU txmenu;
if (fSave) {
memset(&txmenu,0,sizeof(txmenu));
strcpy(txmenu.szname,"追加機能");
txmenuOp(TXMENUOP_LOADEX,(LPVOID)&txmenu,NULL);
} else {
hctrl = GetDlgItem(context->hwnd,IDD_COMMANDS);
ListBox_ResetContent(hctrl);
}
//
txstr szline;
txstr szline2;
mchar buff[CCHLINE];
int i = 0;
txJumpFileTop(text);
for (;;i++) {
txGetLine(text,szline);
int len;
if (len = strmatch(szline,"_txcmd")) {
BOOL fMenu = FALSE;
mchar* szcmd = &szline[len];
mchar* szcaption = "";
//
while(*szcmd == ' '|| *szcmd == '\t') szcmd++;
{
mchar*p = strchr(szcmd,'(');
if (p) *p = 0;
}
if (!txNextPara(text)) break;
//
{
while(1) {
txGetLine(text,szline2);
if (strstr(szline2,"{$")) {
if (strstr(szline2,"{$WZMENU}")) fMenu = TRUE;
} else {
break;
}
if (!txNextPara(text)) break;
}
mchar*p = szline2;
while(*p == ' '||*p == '\t') p++;
if (*p == '/' && p[1] == '/' && p[2] != '/') {
p += 2;
while(*p == ' '||*p == '\t') p++;
szcaption = p;
}
}
if (fSave) {
///dialogaText(text,"config");
if (fMenu) {
BOOL fFound = FALSE;
// 重複チェック
int i;
for (i = 0;i < txmenu.nmenuitem;i++) {
if (!stricmp(txmenu.tmenuitem[i].szcmd,szcmd)) {
fFound = TRUE;
break;
}
}
if (!fFound) {
if (txmenu.nmenuitem < TXMENUITEM_N) {
TXMENUITEM* item = &txmenu.tmenuitem[txmenu.nmenuitem++];
strcpymax(item->szcmd,szcmd,CCHWORD);
strcpymax(item->szcaption,szcaption,CCHWORD);
}
}
}
} else {
sprintf(buff," %s\t%s",szcmd,szcaption);
ListBox_AddString(hctrl,buff);
}
}
if (!txNextPara(text)) break;
}
if (fSave) {
#if 0
{
int i;
for (i = 0;i < txmenu.nmenuitem;i++) {
information("%s",txmenu.tmenuitem[i].szcmd);
}
}
#endif
//information("%d",txmenu.nmenuitem);
//information("%s",txmenu.szname);
txmenuOp(TXMENUOP_SAVEEX,(LPVOID)&txmenu,NULL);
} else {
ListBox_SetCurSel(hctrl,0);
}
}
static BOOL install_fileChanged(INSTALLCONTEXT* context)
{
HWND hwnd = context->hwnd;
TX* text = context->text;
//
mchar _szfilename[CCHPATHNAME];
GetDlgItemText(hwnd,IDD_FILENAME,_szfilename,CCHPATHNAME);
static mchar *szexts = ".txm;.txe;.tll;.c;.txc";
// 検索
strcpy(context->szfilename,_szfilename);
pathAuto(context->szfilename,wzGetEnv(WZENV_TXPATH),szexts);
// 整え
pathSetExt(context->szfilename,NULL);
strlwr(context->szfilename);
// マクロかチェック
int txp = macroGetKind(context->szfilename);
if (txp == TXP_ERROR) {
return FALSE;
} else {
//1.99B 検索結果が反映されてなかった
context->fNoEdit++;
SetDlgItemText(hwnd,IDD_FILENAME,context->szfilename);
context->fNoEdit--;
//
txDeleteText(text);
//
DWORD size;
LPVOID pmem;
{
mchar szheaderfilename[CCHPATHNAME];
macroGetFullFileName(context->szfilename,szheaderfilename);
pmem = macroGetExport(szheaderfilename,&size);
}
if (pmem) {
if (memClipCopy(pmem,size,HCLIP_WIN,CLIP_CHAR)) {
txPaste(text);
// カテゴリを削除
txJumpFileTop(text);
while(1) {
if (!txSearchEx(text,"//{###",SEARCH_CUR)) break;
if (!txDeletePara(text)) break;
}
// カテゴリを指定
txJumpFileTop(text);
txstr szline;
while(1) {
txGetLine(text,szline);
if (!strstr(szline,"//")) {
// 前後に1行空ける
txInsert(text,"\n\n//{###追加機能}\n\n");
break;
}
if (!txNextPara(text)) break;
}
}
memFree(pmem);
}
return TRUE;
}
}
BOOL dlgprocInstall(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static BOOL fEdited = FALSE;
HDIALOG hd = dialogFromHwnd(hwnd);
INSTALLCONTEXT* context = (LPVOID)dialogGetCustdata(hd);
switch(message) {
case WM_INITDIALOG: {
context->hwnd = hwnd;
install_explainFromText(context);
install_cmdsFromText(context,FALSE);
//
HWND hctrl = GetDlgItem(hwnd,IDD_COMMANDS);
int tab = DTCX * 30;
SendMessage(hctrl,LB_SETTABSTOPS,1,(LPARAM)&tab);
//
PostMessage(hwnd,WM_COMMAND,IDD_REFER,0);
break;
}
case WM_COMMAND: {
int id = WM_COMMAND_GetId(wParam);
int notify = WM_COMMAND_GetNotify(wParam,lParam);
switch(id) {
case IDD_FILENAME: {
if (!context->fNoEdit) fEdited = TRUE;
break;
}
case IDD_REFER: {
mchar szfilename[CCHPATHNAME];
GetDlgItemText(hwnd,IDD_FILENAME,szfilename,CCHPATHNAME);
pathSetFileName(szfilename,\"*.c;*.txm;*.txe;*.tll");
//pathSetFileName(szfilename,\"filer.txe");
//pathSetFileName(szfilename,\"a:\editym.tll");
if (txofnReferFileName(text,szfilename,"インストールするマクロファイル")) {
SetDlgItemText(hwnd,IDD_FILENAME,szfilename);
}
return TRUE;
}
}
break;
}
case WM_TXDIALOGENTERIDLE: {
if (fEdited) {
fEdited = FALSE;
//
{
BOOL fOK;
if (fOK = install_fileChanged(context)) {
install_explainFromText(context);
install_cmdsFromText(context,FALSE);
} else {
ListBox_ResetContent(GetDlgItem(hwnd,IDD_EXPLAIN));
ListBox_ResetContent(GetDlgItem(hwnd,IDD_COMMANDS));
}
EnableWindow(GetDlgItem(hwnd,IDOK),fOK);
}
}
break;
}
}
return FALSE;
}
BOOL TXCMDBASE uiInstall(TX* text)
{
// マクロのインストール
BOOL fInstallSource = FALSE; // ソースもインストールする?
INSTALLCONTEXT context;
memset(&context,0,sizeof(context));
TX _text;
TX* text = &_text;
txInitText(text);
txOpenText(text);
context.text = text;
HDIALOG hd = dialog("マクロのインストール");
dialogSetHookEx(hd,"\m.dlgprocInstall");
dialogSetCustdata(hd,(DWORD)&context);
dialogSetGroupRight(hd,DTCX * 80);
dialogGroup(hd,"インストールするマクロ");
dialogSetH(hd);
//
dialogControlID(hd,IDD_FILENAME);
dialogStrC(hd,"マクロファイル(&F):",context.szfilename,14,CCHPATHNAME,30);
//
dialogControlID(hd,IDD_REFER);
dialogCmd(hd,"参照(&R)...",12);
//
dialogLF(hd);
dialogSetV(hd);
dialogCheck(hd,"ソースプログラムもインストール(&S)",&fInstallSource);
dialogGroupEnd(hd);
dialogSpaceV(hd);
dialogSpaceV(hd);
dialogControlID(hd,IDD_EXPLAIN);
dialogList(hd,"概要(&E):",NULL,79,6);
dialogSpaceV(hd);
dialogSpaceV(hd);
dialogControlID(hd,IDD_COMMANDS);
dialogList(hd,"コマンド一覧(&C):",NULL,79,6);
dialogCmdLFV(hd);
dialogOK(hd,10);
dialogCancel(hd,10);
if (dialogOpen(hd)) {
txstr szsrcpath = context.szfilename;
pathSetFileName(szsrcpath,0);
txstr szcmd(500);
sprintf(szcmd,"mcopy \"%smacro\" -p\"%s\" ",text->szexedir,szsrcpath);
// バイナリ/ソースファイル
{
mchar szfull[CCHPATHNAME];
macroGetFullFileName(context.szfilename,szfull);
szcmd += "\"";
szcmd += pathGetFileName(szfull);
szcmd += "\" ";
// ソースファイル
if (fInstallSource) {
if (context.szsrcfiles[0]) {
// ソースファイルの指定あり
szcmd += context.szsrcfiles;
} else {
mchar *tszext[] = {".c",".txc",".h",".txh",NULL};
int i;
mchar *szext;
for (i = 0;szext = tszext[i];i++) {
pathSetExt(szfull,szext);
if (fileIsExist(szfull)) {
szcmd += "\"";
szcmd += pathGetFileName(szfull);
szcmd += "\" ";
}
}
}
}
}
//information(context.szfiles);
szcmd += context.szfiles;
//information("[%s]",szcmd);
cmd(szcmd);
//
#if 1//2.90
//dialogaText(text,"aaa");
apidb2TakeinText(text);
apidb2FlushCache();
#else
apidbOpen();
apidbFlushText(text);
apidbClose();
#endif
//
install_cmdsFromText(&context,TRUE);
SendMessage(text->hwndbase,WM_TXFLUSHMENU,0,0);
//1.99A インストール時のイベントマクロ呼び出し実装
{
txstr szauto = pathGetFileName(context.szfilename);
pathSetExt(szauto,".at_installed");
PMACROFUNC pfunc;
if (macroGetFuncAddress(szauto,&pfunc)) {
DWORD ret;
macroCallAddress(&pfunc,&ret,2,text,0);
}
}
}
txClose(text);
return TRUE;
}
//{###フィルタ・イベント}
//2.00E txuiReopenだけでは、txSwitchViewModeしてからオープンしたテキストを通常モードに変更できなかった
ClearViewMode
{
BOOL fViewMode = text->share->fViewMode;
text->share->fViewMode = FALSE;
txuiReopen(text);
text->share->fViewMode = fViewMode;
}
void TXCMD at_viewmode(TX* text)
{
// view mode 定義マクロ
// [設定]-[マクロ]-[イベントマクロ]-[ビュー]にこのコマンドが登録されています。
text->fNoFlushKey = TRUE;//2.00E4
// キー割り当て
#key
txQuit Q {Enter} {Esc} // 終了
.ClearViewMode +{Enter} // 編集モード切り替え
txNextPage C {SPACE} // ページダウン
txPrevPage R +{SPACE} {Backspace} // ページアップ
#end
#if 0
//ツールバーやメニューを変更する場合は次の様にtxFlushUIしてください
//ただしこれをすると文書の設定ダイアログでOKすると、変更内容が登録されます。
text->fDispToolbar = TRUE;
strcpy(text->szToolbar,"HTMLファイル編集");
txFlushUI(text);
#endif
}
//
DWORD op(TX* text,int op,LPARAM arg1,LPARAM arg2)
{
DWORD ret;
switch(op) {
case MACROOP_OPENMAIL: {
macroCall("event.openMail",&ret,2,text,arg1);
return ret;
}
case MACROOP_OPENURL: {
macroCall("event.openURL",&ret,2,text,arg1);
return ret;
}
case MACROOP_TXSEARCHLISTEX: {
extern "search" int TXAPI txSearchlistEx(TX* _text,mchar* szFind,TXSEARCHLISTARG* arg);
return txSearchlistEx(text,(LPVOID)arg1,(TXSEARCHLISTARG*)arg2);
}
//3.00A2 970505 MACROOP_REPLACEREPORT
}
}