=================================================================== RCS file: /home/cvs/OpenXM_contrib2/windows/asir32gui/asir32guiview.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.14 diff -u -p -r1.1.1.1 -r1.14 --- OpenXM_contrib2/windows/asir32gui/asir32guiview.cpp 2000/11/22 06:14:29 1.1.1.1 +++ OpenXM_contrib2/windows/asir32gui/asir32guiview.cpp 2005/10/03 00:07:53 1.14 @@ -7,6 +7,8 @@ #include "asir32guiDoc.h" #include "asir32guiView.h" #include "FatalDialog.h" +#include +#include #ifdef _DEBUG #define new DEBUG_NEW @@ -14,9 +16,8 @@ static char THIS_FILE[] = __FILE__; #endif -const WindowHeight = 200; -const WindowWidth = 400; -const TextBufferSize = 32768; +// const TextBufferSize = 32768; +const TextBufferSize = 16384; CAsir32guiView *theView; @@ -35,6 +36,7 @@ void insert_to_theView(char *); void get_rootdir(char *,int,char *); extern int bigfloat, prtime, prresult; extern char *asir_libdir; +extern int asirgui_kind; void insert_to_theView(char *str) { @@ -63,6 +65,20 @@ BEGIN_MESSAGE_MAP(CAsir32guiView, CEditView) ON_COMMAND(ID_ASIRHELP, OnAsirhelp) ON_UPDATE_COMMAND_UI(ID_FILE_LOG, OnUpdateFileLog) ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) + ON_COMMAND(IDR_FONT, OnFont) + ON_WM_CREATE() + ON_COMMAND(ID_CONTRIBHELP, OnContribhelp) + ON_WM_SIZE() + ON_COMMAND(ID_DSOLV, OnDsolv) + ON_COMMAND(ID_GNUPLOT, OnGnuplot) + ON_COMMAND(ID_OKDIFF, OnOkdiff) + ON_COMMAND(ID_OKDMODULE, OnOkdmodule) + ON_COMMAND(ID_OM, OnOm) + ON_COMMAND(ID_PFPCOH, OnPfpcoh) + ON_COMMAND(ID_PLUCKER, OnPlucker) + ON_COMMAND(ID_SM1, OnSm1) + ON_COMMAND(ID_TIGERS, OnTigers) + ON_COMMAND(ID_TODOPARAMETRIZE, OnTodoparametrize) //}}AFX_MSG_MAP // 標準印刷コマンド // ON_COMMAND(ID_FILE_PRINT, CEditView::OnFilePrint) @@ -83,7 +99,7 @@ CAsir32guiView::CAsir32guiView() read_input_history(); DebugMode = 0; DebugInMain = 0; - MaxLineLength = 80; +// MaxLineLength = 80; LogStart = 0; Logging = 0; Logfp = NULL; @@ -162,14 +178,21 @@ CAsir32guiDoc* CAsir32guiView::GetDocument() // 非デバ void CAsir32guiView::PutChar(int c) { - int i; + int i,len; char buf[2]; + if ( EndPos >= sizeof(Buffer)-1 ) { + Beep(); return; + } for ( i = EndPos-1; i >= CurrentPos; i-- ) - Buffer[i+1] = Buffer[i]; + Buffer[i+1] = Buffer[i]; Buffer[CurrentPos] = (char)c; - buf[0] = (char)c; buf[1] = 0; - Insert(buf,FALSE); +// buf[0] = (char)c; buf[1] = 0; +// Insert(buf,FALSE); + len = GetWindowTextLength(); + if ( len+1 >= TextBufferSize ) + DeleteTop(); + CEditView::OnChar(c, 1, 0); CurrentPos++; EndPos++; } @@ -234,12 +257,12 @@ void CAsir32guiView::DeleteTop() } } if ( Logging ) { - len1 = (len0 - len - LogStart); - if ( len1 > 0 ) { - fwrite(buf+LogStart,1,len1,Logfp); - LogStart = 0; - } else - LogStart = -len1; + if ( len < LogStart ) + LogStart -= len; + else { + fwrite(buf+LogStart,1,len-LogStart,Logfp); + LogStart = 0; + } } UnlockBuffer(); if ( q ) { @@ -277,30 +300,38 @@ void CAsir32guiView::Beep(void) { } void CAsir32guiView::Paste(void) { - char buf[2*BUFSIZ]; - const char *src; - char c; - int i,j,l; - HGLOBAL hClip; + char buf[2*BUFSIZ]; + const char *src; + char c; + int i,j,l; + HGLOBAL hClip; - if ( OpenClipboard() == FALSE ) { - Beep(); return; + if ( asirgui_kind == ASIRGUI_MESSAGE ) { + Beep(); return; } + + if ( OpenClipboard() == FALSE ) { + Beep(); return; + } hClip = GetClipboardData(CF_TEXT); src = (const char *)::GlobalLock(hClip); - if ( !src || (l = strlen(src)) >= 2*BUFSIZ ) { + if ( !src || (l=strlen(src)) >= sizeof(Buffer)-EndPos ) { ::CloseClipboard(); Beep(); return; } - for ( i = j = 0; i < l; i++ ) - if ( (c = src[i]) != '\n' && c != '\r' ) - buf[j++] = c; - buf[j] = 0; + for ( i = j = 0; i < l; i++ ) + if ( (c = src[i]) != '\n' && c != '\r' ) + buf[j++] = c; + buf[j] = 0; ::GlobalUnlock(hClip); ::CloseClipboard(); GetEditCtrl().ReplaceSel(buf); - strncpy(Buffer+EndPos,buf,j); - EndPos += j; CurrentPos = EndPos; + l = strlen(buf); + for ( i = EndPos-1; i >= CurrentPos; i-- ) + Buffer[i+l] = Buffer[i]; + for ( j = 0, i = CurrentPos; j < l; j++, i++ ) + Buffer[i] = buf[j]; + EndPos += l; CurrentPos += l; } #define CTRL(c) (c)&0x1f @@ -339,7 +370,12 @@ void CAsir32guiView::OnChar(UINT nChar, UINT nRepCnt, { // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください char *exp_result; + char tmp[BUFSIZ]; + if ( asirgui_kind == ASIRGUI_MESSAGE ) { + Beep(); return; + } + switch ( nChar ) { case CTRL('M'): case CTRL('J'): UpdateCursor(EndPos); @@ -395,7 +431,8 @@ void CAsir32guiView::OnChar(UINT nChar, UINT nRepCnt, case CTRL('C'): send_intr(); /* wake up the engine */ - put_line(""); + tmp[0] = 0; + put_line(tmp); return; default : if ( nChar >= 0x20 && nChar < 0x7f ) @@ -427,8 +464,17 @@ void CAsir32guiView::OnFileOpen() // TODO: この位置にコマンド ハンドラ用のコードを追加してください char cmd[BUFSIZ*2]; // XXX char *p; + static char errmsg[BUFSIZ]; + static char prevdir[BUFSIZ]; + if ( !prevdir[0] ) { + get_rootdir(prevdir,sizeof(prevdir),errmsg); + strcat(prevdir,"\\lib"); + } + + _chdir(prevdir); CFileDialog fileDialog(TRUE); + fileDialog.m_ofn.lpstrInitialDir = prevdir; if ( fileDialog.DoModal() == IDOK ) { CString pathName = fileDialog.GetPathName(); sprintf(cmd,"load(\"%s\");",pathName); @@ -436,6 +482,11 @@ void CAsir32guiView::OnFileOpen() if ( *p == '\\' ) *p = '/'; put_line(cmd); + p = strrchr(pathName,'\\'); + if ( p ) { + *p = 0; + strcpy(prevdir,pathName); + } } } @@ -445,8 +496,8 @@ void CAsir32guiView::OnAsirhelp() char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; get_rootdir(root,sizeof(root),errmsg); - sprintf(helpfile,"%s\\bin\\asirhelp.chm",root); - HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + sprintf(helpfile,"%s\\help\\asirhelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); } void CAsir32guiView::OnFileLog() @@ -485,4 +536,186 @@ void CAsir32guiView::OnEditPaste() { // TODO: この位置にコマンド ハンドラ用のコードを追加してください Paste(); +} + +void CAsir32guiView::UpdateMetrics() +{ + TEXTMETRIC tm; + RECT r; + + GetEditCtrl().GetRect(&r); + CDC *pDC = GetDC(); + pDC->SelectObject(GetFont()); + pDC->GetTextMetrics(&tm); + MaxLineLength = (r.right-r.left)/tm.tmAveCharWidth-1; +} + +void CAsir32guiView::OnFont() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + int ret; + LOGFONT lf; + + GetFont()->GetLogFont(&lf); + CFontDialog fd(&lf,CF_EFFECTS | CF_SCREENFONTS | CF_FIXEDPITCHONLY); + static CFont *f = 0; + + ret = fd.DoModal(); + if ( ret == IDOK ) { + fd.GetCurrentFont(&lf); + if ( f ) + delete f; + f = new CFont; + f->CreateFontIndirect(&lf); + SetFont(f); + UpdateMetrics(); + } +} + +int CAsir32guiView::OnCreate(LPCREATESTRUCT lpCreateStruct) +{ + if (CEditView::OnCreate(lpCreateStruct) == -1) + return -1; + + // TODO: この位置に固有の作成用コードを追加してください + + LOGFONT logFont; memset(&logFont, 0, sizeof(LOGFONT)); + logFont.lfHeight = 20; + logFont.lfCharSet = DEFAULT_CHARSET; + strcpy(logFont.lfFaceName, "Terminal"); + CFont *f = new CFont; + f->CreateFontIndirect(&logFont); + SetFont(f); + UpdateMetrics(); + GetEditCtrl().LimitText(nMaxSize); + GetEditCtrl().SetTabStops(m_nTabStops); + + return 0; +} + +void CAsir32guiView::OnContribhelp() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\cmanhelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); +} + +void CAsir32guiView::OnSize(UINT nType, int cx, int cy) +{ + CEditView::OnSize(nType, cx, cy); + + // TODO: この位置にメッセージ ハンドラ用のコードを追加してください + UpdateMetrics(); +} + +void CAsir32guiView::OnDsolv() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\dsolvhelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); +} + +void CAsir32guiView::OnGnuplot() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\gnuplothelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + +} + +void CAsir32guiView::OnOkdiff() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\ok_diffhelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + +} + +void CAsir32guiView::OnOkdmodule() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\ok_dmodulehelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + +} + +void CAsir32guiView::OnOm() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\omhelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + +} + +void CAsir32guiView::OnPfpcoh() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\pfpcohhelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + +} + +void CAsir32guiView::OnPlucker() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\pluckerhelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + +} + +void CAsir32guiView::OnSm1() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\sm1help.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + +} + +void CAsir32guiView::OnTigers() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\tigershelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + +} + +void CAsir32guiView::OnTodoparametrize() +{ + // TODO: この位置にコマンド ハンドラ用のコードを追加してください + char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ]; + + get_rootdir(root,sizeof(root),errmsg); + sprintf(helpfile,"%s\\help\\todo_parametrizehelp.chm",root); + ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0); + }