home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1999 February / VPR9902A.BIN / APUPDATE / VC / Tx300d / TX300D.LZH / HELP.C < prev    next >
Text File  |  1997-05-20  |  18KB  |  717 lines

  1. // WZ EDITOR 標準機能 ヘルプ
  2. // Copyright 1995-96 TY
  3.  
  4. //{###ヘルプ}
  5. //ヘルプファイルのオープン、WZAPIヘルプ、
  6. //"About..."ダイアログ作成機能などを提供します。
  7.  
  8. #include <windows.h>
  9. #include <windowsx.h>
  10. #include "dialog.h"
  11. #if 1//2.90 
  12.     #include "apidb2.h"
  13. #else
  14.     #include "cmdlist.h"
  15. #endif
  16.  
  17. static void helpinformation(mchar* szhelpfilename,txstr szword)
  18. {
  19.     if (szword == "") {
  20.         statprintf("ヘルプ %s の目次を開きます",szhelpfilename);
  21.     } else {
  22.         statprintf("ヘルプ %s を %s で引きます",szhelpfilename,szword);
  23.     }
  24. }
  25.  
  26. //1.00H2 
  27. static BOOL getword(tx* text,txstr szword)
  28. {
  29.     txJumpWordTop(text);
  30.     TXCHAR ch = txGetChar(text);
  31.     if (ch > ' ' && !txchIsReturn(ch)) {    // 有効な文字列なら...
  32.         txGetWord(text,szword);
  33.         return TRUE;
  34.     } else {
  35.         szword = "";
  36.         return FALSE;
  37.     }
  38. }
  39.  
  40. BOOL TXAPI helpContext(mchar* szfilename,int id)
  41. {
  42. //1.99A 
  43.     return WinHelpWz(szfilename,HELP_CONTEXT,id);
  44. }
  45.  
  46. BOOL TXAPI helpPartialkey(mchar* szfilename,mchar* szkey)
  47. {
  48. //1.99A 
  49.     return WinHelpWz(szfilename,HELP_PARTIALKEY,(LPARAM)szkey);
  50. }
  51.  
  52. static mchar* strchrtail(mchar* szstr,WORD c)
  53. {
  54. // szstrの一番後方のcへのポインタを返す
  55. //3.00A2 970505 new
  56.     mchar* p0 = NULL;
  57.     mchar* p = szstr;
  58.     while(1) {
  59.         p = strchr(p,c);
  60.         if (!p) break;
  61.         p0 = p;
  62.         p = p + 1;
  63.     }
  64.     return p0;
  65. }
  66.  
  67. BOOL TXAPI helpOpen(mchar *_szfilename)
  68. {
  69. // カーソル位置の単語で_szfilenameのWindowsHELPを引く
  70.     mchar szfilename[CCHPATHNAME] = {0};
  71.     pathSetFileName(szfilename,_szfilename);
  72.     txstr szword;
  73.     //
  74. #if 1//3.00A2 970505 HTMLテキストモードで、"<TAG>"中にカーソルがあるときはTAGのヘルプを呼び出す様にした
  75.     if (text->fHTML) {
  76.         if (txIsWP(text)) {
  77.             //2.99H 970405 HTML体裁モードで、タグ上での外部ヘルプ呼び出しに対応
  78.             PLUGHTMLTAG* plug = txGetCurPlug(text);
  79.             if (plug && plug->head.modePlug == PLUG_HTML_TAG) {
  80.                 mchar* p = plug->szTag;
  81.                 if (*p == '<') p++;
  82.                 int len = strGetWordLen(p);
  83.                 if (len && p[len-1] == '>') len--;
  84.                 txstrcpylen(szword,p,len);
  85.             }
  86.         } else {
  87.             txstr sz(160);
  88.             if (txGetChar(text) == '<') {
  89.                 txGetParaRear(text,sz);
  90.             } else {
  91.                 txstr szline(80);
  92.                 txGetParaFront(text,szline);
  93.                 mchar* p = strchrtail(szline,'<');
  94.                 if (p && !strchr(p,'>')) {
  95.                     txstr szrear(80);
  96.                     txGetParaRear(text,szrear);
  97.                     sz = p;
  98.                     sz += szrear;
  99.                 }
  100.             }
  101.             if (sz[0]) {
  102. //information(sz);
  103.                 mchar* p = sz;
  104.                 p++;
  105.                 if (*p == '/') p++;
  106.                 //
  107.                 mchar* q = strchr(p,'>');
  108.                 if (q) *q = 0;
  109.                 //
  110.                 int len = strGetWordLen(p);
  111.                 txstrcpylen(szword,p,len);
  112.             }
  113.         }
  114.     }
  115. #else
  116.     if (text->fHTML && text->editmode) {
  117.         //2.99H 970405 HTML体裁モードで、タグ上での外部ヘルプ呼び出しに対応
  118.         PLUGHTMLTAG* plug = txGetCurPlug(text);
  119.         if (plug && plug->head.modePlug == PLUG_HTML_TAG) {
  120.             mchar* p = plug->szTag;
  121.             if (*p == '<') p++;
  122.             int len = strGetWordLen(p);
  123.             if (len && p[len-1] == '>') len--;
  124.             txstrcpylen(szword,p,len);
  125.         }
  126.     }
  127. #endif
  128.     //
  129.     if (szword[0] || getword(text,szword)) {
  130.         helpinformation(szfilename,szword);
  131. #if 1//2.00B 
  132.         WinHelpWz(szfilename,HELP_PARTIALKEY,(LPARAM)(mchar*)szword);
  133. #else
  134.         WinHelp(text->hwndbase,szfilename,HELP_PARTIALKEY,(LPARAM)(mchar*)szword);
  135. #endif
  136.         return TRUE;
  137.     } else {
  138.         helpinformation(szfilename,szword);
  139. #if 1//2.00B 
  140.         WinHelpWz(szfilename,HELP_CONTENTS,0);
  141. #else
  142.         WinHelp(text->hwndbase,szfilename,HELP_CONTENTS,0);
  143. #endif
  144.         return FALSE;
  145.     }
  146. }
  147.  
  148. BOOL TXCMDBASE txapihelp(TX* text)
  149. {
  150. // カーソル位置の単語でTXAPIヘルプを引く
  151.     static mchar szfilename[] = "WZ API";
  152.     txstr szword;
  153. #if 1//3.00B1 970520 WZ APIヘルプ:カーソル位置が関数名でなければ、uiApiListSearchの代わりにuiApiListを実行。uiApiListでは「基本のみ表示」を選んだら覚える(uiApiListSearchは常に「全て表示」)。
  154.     TXCHAR ch = txGetChar(text);
  155.     if (isalpha(ch) || ch == '_') {
  156.     } else {
  157.         uiApiList(text);
  158.         return TRUE;
  159.     }
  160. #endif
  161.     if (getword(text,szword)) {
  162.         helpinformation(szfilename,szword);
  163.         #if 1//2.90 
  164.         uiApiListSearch(szword);
  165.         #else
  166.         apilistSearch(szword);
  167.         #endif
  168.     } else {
  169.         helpinformation(szfilename,szword);
  170.         #if 1//2.90 
  171.         uiApiListSearch(NULL);
  172.         #else
  173.         apilistSearch(NULL);
  174.         #endif
  175.     }
  176.     return TRUE;
  177. }
  178.  
  179. static void _help(mchar *szfilename)
  180. {
  181.     if (!stricmp(szfilename,"tx")) {
  182.         txapihelp(text);
  183.     } else if (!stricmp(szfilename,"htmlwz")) {//2.99F 970404 外部ヘルプにhtmlwzを登録したときWZ16,NTで開けなかった
  184.         if ((_fwin40 && _platform == WINDOWS95) || _fwinnt351) {
  185.             helpOpen(text->szexedir + "htmlwz.hlp");
  186.         } else {
  187.             helpOpen(text->szexedir + "htmlwz16.hlp");
  188.         }
  189.     } else {
  190.         helpOpen(szfilename);
  191.     }
  192. }
  193.  
  194. help
  195. {
  196.     HDIALOG hd = dialog("外部ヘルプの説明");
  197.     
  198.     dialogCaption(hd,"●概要");
  199.     dialogIndent(hd,2);
  200.     dialogCaption(hd,"WZでは、2つまで外部ヘルプを登録することができます。");
  201.     dialogCaption(hd,"外部ヘルプは拡張子ごとに登録できます。");
  202.     dialogCaption(hd,"登録は[設定]-[拡張子に固有の設定]-[タイトル・ヘルプ・マクロ]-[外部ヘルプ]で行います。");
  203.     dialogIndent(hd,-2);
  204.     dialogCaption(hd,"●外部ヘルプを引く");
  205.     dialogIndent(hd,2);
  206.     dialogCaption(hd,"カーソル位置の単語で、外部ヘルプを引くことができます。");
  207.     dialogCaption(hd,"Ctrl+{F1}で外部ヘルプ1、Ctrl+{F2}で外部ヘルプ2を引けます。");
  208.     dialogCaption(hd,"引くときに、カーソル位置を単語の先頭に合わせる必要はありません。");
  209.     dialogCaption(hd,"また、カーソル位置が空白文字などのときは、ヘルプの目次を開きます。");
  210.     dialogIndent(hd,-2);
  211.     dialogOpen(hd);
  212. }
  213.  
  214. BOOL TXCMDBASE help1(TX* text)
  215. {
  216. // ヘルプ1を開く
  217. //{#MS} ^[F1] [F1]
  218. //{#VZIBM} ^[F1] [F12]
  219. //{#VZ98} ^[F1] [HELP]
  220. //{#MI} ^[F1]
  221. //{#EMACS} {F12} ^{F1}
  222.     if (text->tszhelp[0][0]) _help(text->tszhelp[0]);
  223.     return TRUE;
  224. }
  225.  
  226. BOOL TXCMDBASE help2(TX* text)
  227. {
  228. // ヘルプ2を開く
  229. //{#MS} ^[F2] [F2]
  230. //{#VZ} ^[F2]
  231. //{#MI} ^[F2]
  232. //{#EMACS} ^{F2}
  233.     if (text->tszhelp[1][0]) _help(text->tszhelp[1]);
  234.     return TRUE;
  235. }
  236.  
  237. mskeyEsc
  238. {
  239. // 選択中でなければ、キー一覧を表示。
  240. // 選択中なら選択解除。
  241. //{#MS} {Esc}
  242.     if (text->fClip) {
  243.         txSelectQuit(text);
  244.     } else {
  245.         call("custmize.uiKeyList");
  246.     }
  247. }
  248.  
  249. //##アバウトダイアログ
  250.  
  251. BITMAPFILEHEADER *bitmapLoad(mchar *szfilename)
  252. {
  253.     BYTE *data = NULL;
  254.     HFILE hf;
  255.     
  256.     hf = _lopen(szfilename,OF_READ);
  257.     if (hf != HFILE_ERROR) {
  258.         BITMAPFILEHEADER head;
  259.         
  260.         _lread(hf,&head,sizeof(head));
  261.         data = GlobalAllocPtr(TXGMEM_MOVEABLE,head.bfSize);
  262.         _llseek(hf,0,SEEK_SET);
  263.         if (data) {
  264.             _hread(hf,data,head.bfSize);
  265.         }
  266.         _lclose(hf);
  267.     }
  268.     return (void*)data;
  269. }
  270.  
  271. static mchar *_about_sztitle;
  272. static mchar *_about_szversion;
  273. static mchar *_about_szcopyright;
  274. static mchar szfilename[CCHPATHNAME];
  275. // ビットマップファイル名をszfilenameに指定しておくこと
  276. static void aboutdraw(HWND hwnddlg)
  277. {
  278.     BITMAPFILEHEADER *head = bitmapLoad(szfilename);
  279.     HWND hwnd = GetDlgItem(hwnddlg,100);
  280.     HDC hdc = GetDC(hwnd);
  281.     HFONT hfont0;
  282.     
  283.     hfont0 = SelectObject(hdc,GetStockObject(GetSystemFontNo()));
  284.     //
  285.     InvalidateRect(hwnd,NULL,TRUE);
  286.     UpdateWindow(hwnd);
  287.     //
  288.     if (head) {
  289.         BITMAPINFOHEADER *info = (void *)((LPBYTE)head + sizeof(BITMAPFILEHEADER));
  290.         LPBYTE bits = (LPBYTE)head + head->bfOffBits;
  291.         int cx = info->biWidth;
  292.         int cy = info->biHeight;
  293. #if 0    // 変わらない
  294.         HBITMAP hbitmap = CreateDIBitmap(
  295.             hdc,
  296.             info,
  297.             CBM_INIT,(LPSTR)bits,
  298.             (LPBITMAPINFO)info,
  299.             DIB_RGB_COLORS
  300.         );
  301.         POINT size,org;
  302.         HDC hdcmem = CreateCompatibleDC(hdc);
  303.         SelectObject(hdcmem,hbitmap);
  304.         SetMapMode(hdcmem,GetMapMode(hdc));
  305.         {
  306.             BITMAP bm;
  307.             GetObject(hbitmap,sizeof(BITMAP),(LPSTR)&bm);
  308.             size.x = bm.bmWidth;
  309.             size.y = bm.bmHeight;
  310.             DPtoLP(hdc,&size,1);
  311.         }
  312.         //
  313.         org.x = 0;
  314.         org.y = 0;
  315.         DPtoLP(hdc,&org,1);
  316.         //
  317.         BitBlt(hdc,0,0,size.x,size.y,hdcmem,org.x,org.y,SRCCOPY);
  318.         DeleteDC(hdcmem);
  319. #else
  320.         SetStretchBltMode(hdc,COLORONCOLOR);
  321.         SetDIBitsToDevice(
  322.             hdc,
  323.             0,0,
  324.             cx,cy,
  325.             0,0,
  326.             0,info->biHeight,
  327.             (LPSTR)bits,
  328.             (LPBITMAPINFO)info,
  329.             DIB_RGB_COLORS
  330.         );
  331. #endif
  332.         GlobalFreePtr(head);
  333.     }
  334.     {
  335.         int cxd;
  336.         int cyd;
  337.         if (_fwin40) {
  338.             TEXTMETRIC tm;
  339.             GetTextMetrics(hdc,&tm);
  340.             cxd = tm.tmAveCharWidth;
  341.             cyd = tm.tmHeight;
  342.         } else {
  343.             cxd = LOWORD(GetDialogBaseUnits());
  344.             cyd = HIWORD(GetDialogBaseUnits());
  345.         }
  346.         SIZE size;
  347.         GetTextExtentPoint(hdc,_about_sztitle,strlen(_about_sztitle),&size);
  348.         int cxtitle = size.cx;
  349.         GetTextExtentPoint(hdc,_about_szversion,strlen(_about_szversion),&size);
  350.         int cxversion = size.cx;
  351.         GetTextExtentPoint(hdc,_about_szcopyright,strlen(_about_szcopyright),&size);
  352.         int cxcopyright = size.cx;
  353.         int cx,cy;
  354.         RECT r;
  355.         
  356.         // set cx,cy
  357.         GetClientRect(hwnd,&r);
  358.         cx = r.right - r.left - cxd;
  359.         cy = r.bottom - r.top;
  360.         //
  361. //        SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT));
  362. //        SetBkColor(hdc,GetSysColor(COLOR_BTNFACE));
  363.         SetTextColor(hdc,RGB(0,0,0));
  364.         if (text1->fCtl3d) {
  365.             SetBkColor(hdc,GetSysColor(COLOR_BTNFACE));
  366.         } else {
  367.             SetBkColor(hdc,RGB(255,255,255));
  368.         }
  369.         //
  370.         if (_about_sztitle[0]) {
  371.             r.top = 5 * (cyd/8);
  372.             r.right = cx - 3 - cxd * 2;
  373.             r.left = r.right - cxtitle;
  374.             TextOut(hdc,r.left,r.top,_about_sztitle,strlen(_about_sztitle));
  375.             r.bottom = r.top + cyd;
  376.             RECTINC(r);RECTINC(r);RECTINC(r);r.left -= cxd * 2;r.right += cxd * 2;
  377.             hdcDrawFrame(hdc,&r,DF_INFO);
  378.         }
  379.         //
  380.         if (_about_szversion[0]) {
  381.             r.top = r.bottom + cyd / 2;
  382.             r.right = cx - 1 - cxd * 2;
  383.             r.left = r.right - cxversion;
  384.             TextOut(hdc,r.left,r.top,_about_szversion,strlen(_about_szversion));
  385.             r.bottom = r.top + cyd;
  386.             RECTINC(r);r.left -= cxd;r.right += cxd;
  387.             hdcDrawFrame(hdc,&r,DF_INFO);
  388.         }
  389.         //
  390.         if (_about_szcopyright[0]) {
  391.             r.top = cy - 13 * (cyd/8);
  392.             r.right = cx - 1 - cxd;
  393.             r.left = r.right - cxcopyright;
  394.             TextOut(hdc,r.left,r.top,_about_szcopyright,strlen(_about_szcopyright));
  395.             r.bottom = r.top + cyd;
  396.             RECTINC(r);r.left -= cxd;r.right += cxd;
  397.             hdcDrawFrame(hdc,&r,DF_INFO);
  398.         }
  399.     }
  400.     if (!text->fCtl3d) {
  401.         RECT r;
  402.         GetClientRect(hwnd,&r);
  403.         hdcDrawFrame(hdc,&r,DF_BUTTON);
  404.     }
  405.     SelectObject(hdc,hfont0);
  406.     ReleaseDC(hwnd,hdc);
  407. }
  408.  
  409. static void OKdraw(HWND hwnddlg)
  410. {
  411.     HWND hwnd = GetDlgItem(hwnddlg,IDOK);
  412.     InvalidateRect(hwnd,NULL,TRUE);
  413.     UpdateWindow(hwnd);
  414. }
  415.  
  416. long TXCALLBACK dialogprocAbout(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  417. {
  418.     switch(message) {
  419.         case WM_INITDIALOG: {
  420.             return TRUE;
  421.         }
  422.         case WM_COMMAND: {
  423.             switch(LOWORD(wParam)) {
  424.                 case IDOK:
  425.                 case IDCANCEL: {
  426.                     EndDialog(hwnd,0);
  427.                     return TRUE;
  428.                 }
  429.             }
  430.             break;
  431.         }
  432.         case WM_PAINT: {
  433.             aboutdraw(hwnd);
  434.             //1.00C Aboutダイアログで、画面外に一部を移動させてリドローさせると、OKボタンが欠けていた
  435.             OKdraw(hwnd);//OKボタンを描画
  436.             break;
  437.         }
  438.     }
  439.     return FALSE;
  440. }
  441.  
  442. BOOL TXAPI aboutDialog(mchar *szbitmapfilename,mchar *szappname,mchar *szversion,mchar *szcopyright)
  443. {
  444. // "About..."ダイアログボックスを表示します
  445. // szbitmapfilenameには、"wz:\uriuri.bmp"のように、
  446. // 表示するビットマップファイルを指定します。
  447. // "wz:\..."の様に指定しないといけません。
  448. // ビットマップの色は16または256色にしてください。
  449. // ビットマップ上に名前やボタンを表示します。
  450. // szappnameにはアプリケーションの名前、
  451. // szversionにはアプリケーションのバージョン、
  452. // szcopyrightにはコピーライトを指定します。
  453.     HDIALOG hd = dialog("About...");
  454.     DTRECT r;
  455.     int cx = 300;
  456.     int cy = 200;
  457.     
  458.     if (strnicmp(szbitmapfilename,"wz:\\",4)) return FALSE;
  459. #ifdef __FLAT__
  460.     if (!stricmp(szbitmapfilename,\"wz:\about.bmp")) {
  461.         strcpy(szfilename,text->szexedir+"about32.bmp");
  462.     } else {
  463.         strcpy(szfilename,text->szexedir+(szbitmapfilename+4));
  464.     }
  465. #else
  466.     strcpy(szfilename,text->szexedir+(szbitmapfilename+4));
  467. #endif
  468.     //
  469.     _about_sztitle = szappname;
  470.     _about_szversion = szversion;
  471.     _about_szcopyright = szcopyright;
  472.     {
  473.         BITMAPFILEHEADER *head = bitmapLoad(szfilename);
  474.         if (head) {
  475.             BITMAPINFOHEADER *info = (void *)((LPBYTE)head + sizeof(BITMAPFILEHEADER));
  476.             cx = info->biWidth;
  477.             cy = info->biHeight;
  478.         }
  479.         GlobalFreePtr(head);
  480.     }
  481.     //
  482.     r.x = 0;r.y = 0;
  483.     if (_fwin40/* && _platform == WINDOWS95 2.98A */) {
  484. #ifdef __FLAT__
  485.         TEXTMETRIC tm;
  486.         HDC hdc = GetDC(text->hwndbase);
  487.         HFONT hfont0 = SelectObject(hdc,GetStockObject(DEFAULT_GUI_FONT));
  488.         GetTextMetrics(hdc,&tm);
  489.         SelectObject(hdc,hfont0);
  490.         ReleaseDC(text->hwndbase,hdc);
  491.         r.cx = cx = (cx * 4) / tm.tmAveCharWidth;
  492.         r.cy = cy = (cy * 8) / tm.tmHeight;
  493. #endif
  494.     } else {
  495.         r.cx = cx = cx * 4 / LOWORD(GetDialogBaseUnits());
  496.         r.cy = cy = cy * 8 / HIWORD(GetDialogBaseUnits());
  497.     }
  498.     _dialogAddItem(hd,DCS_LTEXT,"",100,&r,0);
  499.     dialogSetSize(hd,&r);
  500.     //
  501.     r.cx = DTCX * 10;
  502.     r.cy = DTCYCMDBUTTON;
  503.     r.x = (cx - r.cx) / 2;
  504.     r.y = cy - DTCYINT - r.cy;
  505.     _dialogAddItem(hd,DCS_DEFPUSHBUTTON,"   OK   ",IDOK,&r,0);
  506.     //
  507.     _dialogModal(hd,macroMakeWndProc("dialogprocAbout"),wndtxGetActive(text->hwndbase),0);
  508.     return TRUE;
  509. }
  510.  
  511. at_ty
  512. {
  513.     static mchar* tsz[] = {
  514.         "電源オン若しくはリセットで起動しました","","1967",
  515.         "マイコン(^^;を知る。12bitのCPUに惹かれてました(^^;","","1980",
  516.         "誕生日プレゼントにi8080Aとi8085を買ってもらう(^^;","","1980",
  517.         "PC-8001を自作しようとするが1年かけて挫折(^^;","","1981",
  518.         "","","",
  519. //
  520.         "マイコンショップの店頭でBASICプログラミングに励む(^^;","","1981-1984",
  521.         "line文でアートしてたらデパートの店員さんに","","",
  522.         "まぁきれいと言われた事を覚えてます(^^;","","",
  523.         "MyComputer購入資金捻出のため、こっそり","","1984.1-7",
  524.         "毎日往復14km走って通学してバス代を浮かす(^^;","","",
  525.         "ポケコンPC-1251を入手","","1984",
  526.         "やっとMyComputerでBASIC/機械語プログラミング開始ウルウル","","1984",
  527.         "ポケコンPB-700を入手","","1984",
  528.         "ポケコンPC-1350を入手","","1984.8",
  529.         "ノートに16進ダンプリストを書きながらプログラミング開始(^^;","","1984.8",
  530.         "OLPHOUS(スクロールシューティングゲーム)","PC-1350","1985.5",
  531.         "ANZAS(スクロールシューティングゲーム)","PC-1350","1985.7",
  532.         "TY-COMPILER(BASICコンパイラ)","PC-1350/60K","1985.9",
  533.         "白黒液晶でソフトで階調表示","PC-1350","1986.2",
  534.         "TY-マージャン","PC-1350","1986.3",
  535.         "ポケットコンピュータ機械語マニュアル 監修","","1986.5",
  536.         "PC-1600Kデータブック 編集","","1986.10",
  537.         "TY-モニタ","PC-13xx/14xx/1600K","1985-1987",
  538.         "TY-TERMINAL","PC-1350/60/60K","1987.4",
  539.         "TY-漢字TERMINAL","PC-1360K","1987.10",
  540.         "TY-TRACER","PC-1350/60/60K","1987.10",
  541.         "TY-MEMO(メモ帳)","PC-1350/60K","1988.2",
  542.         "TY-簡易TERMINAL","PC-1480","1988.3",
  543.         "TY-DISASSEMBLER","PC-1480","1988.4",
  544.         "TY-簡易ASSEMBLER","PC-1480","1988.5",
  545.         "TY-DOS","PC-1480","1988.8",
  546.         "TY-TERM","PC-1480","1988.8",
  547.         "TY-MON","PC-1480","1988.8",
  548.         "TY-ED(エディタ)","PC-1480","1988.9",
  549.         "TY-KXASM(簡易アセンブラ)","PC-1480","1988.9",
  550.         "アルバイトで旅券管理システムのCでのプログラミング開始","","1988",
  551.         "「プログラムの部品化/再利用」、","","1991.3",
  552.         "「アプリも部品として再利用できる」をコンセプトにVW WORKS開発開始","","",
  553.         "VW WORKS","PC-9801","1993.6",
  554.         "VWの締切前は多摩川の土手や桜の花が切れそうな心を癒してくれました(^^;","","",
  555.         "WZ EDITOR 1.0","Windows3.1","1995.7",
  556.         "WZは95.1まで白黒ノートPC-9801NS/Aで作ってました","","",
  557.         "川の土手や桜の花の下でもせっせとプログラミング(^^)","","",
  558.         "WZ EDITOR 1.01","Windows95/NT/3.1","1995.12",
  559.         "WZ EDITOR 2.0","Windows95/NT/3.1","1996.3",
  560.         "WZ EDITOR 3.0","Windows95/NT/3.1","1997.4",
  561.         "こうして改めて見るとよくつくったなぁという感じです。","","",
  562.         "ここまでくるのに沢山の方にお世話になりました。","","",
  563.         "この場を借りて感謝致します。","","",
  564.         "そして、これからもどうぞよろしく!","","",
  565.     };
  566.     int npage = sizeof(tsz) / sizeof(mchar*) / 3;
  567.     int ipage = 0;
  568.     int lcy = 5;
  569.     while(1) {
  570.         {
  571.             HDIALOG hd = dialog("作者紹介 山口敏郎(TY)");
  572.             dialogSetH(hd);
  573.             int i;
  574.             int n = lcy;
  575.             for (i = ipage;i < npage && n--;i++) {
  576.                 dialogCaption(hd,tsz[i*3]);
  577.                 dialogSetPosLX(hd,30);
  578.                 dialogCaption(hd,tsz[i*3+1]);
  579.                 dialogSetPosLX(hd,50);
  580.                 dialogCaption(hd,tsz[i*3+2]);
  581.                 dialogSetPosLX(hd,60);
  582.                 dialogLF(hd);
  583.             }
  584.             dialogLFV(hd);
  585.             //ダイアログのサイズを一定に
  586.             dialogSetPosLX(hd,70);
  587.             dialogSetV(hd);
  588.             dialogOK(hd,10);
  589.             dialogCancel(hd,10);
  590.             if (!dialogOpen(hd)) break;
  591.         }
  592.         ipage += lcy;
  593.         if (ipage >= npage) break;
  594.     }
  595. }
  596.  
  597. BOOL dlgprocAbout(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
  598. {
  599.     switch(message) {
  600.         case WM_LBUTTONDOWN: {
  601.             int x = LOWORD(lParam);
  602.             int y = HIWORD(lParam);
  603.             RECT r;
  604.             GetClientRect(hwnd,&r);
  605.             if (r.right / 3 < x && x < r.right * 2 / 3) {
  606.                 if (r.bottom / 3 < y && y < r.bottom * 2 / 3) {
  607.                     at_ty();
  608.                 }
  609.             }
  610.             break;
  611.         }
  612.     }
  613.     return FALSE;
  614. }
  615.  
  616. //1.00H 
  617. BOOL TXAPI about(ABOUTINFO* info)
  618. {
  619.     HDIALOG hd = dialog("About...");
  620.     
  621.     {
  622.         PMACROFUNC pfunc;
  623.         if (macroGetFuncAddress("dlgprocAbout",&pfunc)) {
  624.             dialogSetHook(hd,&pfunc);
  625.         }
  626.     }
  627.     
  628.     if (info->szicon) {
  629.         DTRECT r;
  630.         r.x = DTCX * 2;
  631.         r.y = DTCY;
  632.         r.cx = DTCX * 5;
  633.         r.cy = DTCY * 3;
  634.         __dialogAddItem(hd,"STATIC",info->szicon,-1,&r,SS_ICON|WS_CHILD|WS_VISIBLE);
  635.     }
  636.     
  637.     int bx = 10;
  638.     dialogIndent(hd,bx);
  639.     dialogSpaceV(hd);
  640.     dialogCaption(hd,info->szappname);
  641.     
  642.     dialogIndent(hd,2);
  643.     dialogCaption(hd,info->szversion);
  644.     dialogCaption(hd,info->szcopyright);
  645.     if (info->szcopyright2) dialogCaption(hd,info->szcopyright2);
  646.     
  647.     dialogCaption(hd,NULL);
  648.     
  649.     int lx = bx + 14;
  650.     dialogSetH(hd);
  651.     dialogSetPosLX(hd,bx);
  652.     dialogCaption(hd,"登録者名:");//2.00E2 ネットワークを意識して"使用者名"から変更
  653.     dialogSetPosLX(hd,lx);
  654.     dialogCaption(hd,text->share->env_username);
  655.     dialogLF(hd);
  656.     //
  657.     dialogSetPosLX(hd,bx);
  658.     dialogCaption(hd,"シリアル番号:");
  659.     dialogSetPosLX(hd,lx);
  660.     dialogCaption(hd,text->share->env_serial);
  661.     dialogLF(hd);
  662.     dialogSetV(hd);
  663.     
  664. #ifdef __FLAT__
  665.     dialogSetPosLX(hd,bx);
  666.     {
  667.         MEMORYSTATUS stat;
  668.         static mchar buff[CCHWORD];
  669.         
  670.         stat.dwLength = sizeof(stat);
  671.         GlobalMemoryStatus(&stat);
  672.         sprintf(
  673.             buff,
  674.             "仮想メモリ %d KB free、物理メモリ %d KB free",
  675.             (stat.dwAvailPageFile+stat.dwAvailPhys)/1024,
  676.             (stat.dwAvailPhys)/1024
  677.         );
  678.         dialogCaption(hd,buff);
  679.         dialogCaption(hd,NULL);
  680.     }
  681. #endif
  682.     
  683.     dialogLFV(hd);
  684.     dialogOK(hd,10);
  685.     
  686.     return dialogOpen(hd);
  687. }
  688.  
  689. BOOL TXCMDBASE aboutWz(TX* text)
  690. {
  691. // WZのバージョン情報
  692.     PostMessage(text->hwndbase,WM_COMMAND,IDM_TXABOUT,0);
  693.     return TRUE;
  694. }
  695.  
  696. BOOL TXCMDBASE helpWz(TX* text)
  697. {
  698. // WZのヘルプの目次を開く
  699.     return WinHelpWz(NULL,HELP_CONTENTS,0L);
  700. }
  701.  
  702. BOOL TXCMDBASE helpWzSearch(TX* text)
  703. {
  704. // WZのヘルプのキーワードで検索を開く
  705.     return WinHelpWz(NULL,HELP_PARTIALKEY,(LPARAM)"");
  706. }
  707.  
  708. extern "event" BOOL TXAPI openURL(TX* text,mchar* szURL);
  709.  
  710. BOOL TXCMDBASE wzhomepage(TX* text)
  711. {
  712. // WZのホームページを開く
  713. //2.99B 970322 new
  714.     return openURL(text,"http://www.villagecenter.co.jp/wz30");
  715. }
  716.  
  717.