[BACK]Return to asir32guiview.cpp CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / windows / asir32gui

Diff for /OpenXM_contrib2/windows/asir32gui/asir32guiview.cpp between version 1.5 and 1.30

version 1.5, 2001/07/20 01:32:08 version 1.30, 2013/12/09 00:51:20
Line 8 
Line 8 
 #include "asir32guiView.h"  #include "asir32guiView.h"
 #include "FatalDialog.h"  #include "FatalDialog.h"
 #include <direct.h>  #include <direct.h>
   #include <io.h>
   
 #ifdef _DEBUG  #ifdef _DEBUG
 #define new DEBUG_NEW  #define new DEBUG_NEW
Line 16  static char THIS_FILE[] = __FILE__;
Line 17  static char THIS_FILE[] = __FILE__;
 #endif  #endif
   
 // const TextBufferSize     = 32768;  // const TextBufferSize     = 32768;
 const TextBufferSize     = 16384;  const int TextBufferSize     = 16384;
   
 CAsir32guiView *theView;  CAsir32guiView *theView;
   
Line 32  void loadfile(char *);
Line 33  void loadfile(char *);
 void put_line(char *);  void put_line(char *);
 void send_intr(void);  void send_intr(void);
 void insert_to_theView(char *);  void insert_to_theView(char *);
 void get_rootdir(char *,int,char *);  BOOL get_rootdir(char *,int,char *);
   const char *get_helpdir();
 extern int bigfloat, prtime, prresult;  extern int bigfloat, prtime, prresult;
 extern char *asir_libdir;  extern char *asir_libdir;
 extern int asirgui_kind;  extern int asirgui_kind;
Line 66  BEGIN_MESSAGE_MAP(CAsir32guiView, CEditView)
Line 68  BEGIN_MESSAGE_MAP(CAsir32guiView, CEditView)
         ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)          ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
         ON_COMMAND(IDR_FONT, OnFont)          ON_COMMAND(IDR_FONT, OnFont)
         ON_WM_CREATE()          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)
           ON_COMMAND(ID_NOROMATRIX, OnNoromatrix)
           ON_COMMAND(ID_NOROMWL, OnNoromwl)
           ON_COMMAND(ID_NNNDBF, OnNnndbf)
           ON_COMMAND(ID_NOROPD, OnNoropd)
           ON_COMMAND(ID_NSTWLG, OnNstwistedlog)
         //}}AFX_MSG_MAP          //}}AFX_MSG_MAP
         // 標準印刷コマンド          // 標準印刷コマンド
 //      ON_COMMAND(ID_FILE_PRINT, CEditView::OnFilePrint)  //      ON_COMMAND(ID_FILE_PRINT, CEditView::OnFilePrint)
Line 80  CAsir32guiView::CAsir32guiView()
Line 99  CAsir32guiView::CAsir32guiView()
 {  {
         // TODO: この場所に構築用のコードを追加してください。          // TODO: この場所に構築用のコードを追加してください。
         static int tmpView_created = 0;          static int tmpView_created = 0;
         char errmsg[BUFSIZ];  
   
         init_input_history();          init_input_history();
         read_input_history();          read_input_history();
         DebugMode = 0;          DebugMode = 0;
         DebugInMain = 0;          DebugInMain = 0;
         MaxLineLength = 80;  //      MaxLineLength = 80;
         LogStart = 0;          LogStart = 0;
         Logging = 0;          Logging = 0;
         Logfp = NULL;          Logfp = NULL;
         ResetIndex();          ResetIndex();
         theView = this;          theView = this;
   #if _MSC_VER > 1300
           /* VS2003.NET or later */
           (AfxGetApp())->EnableHtmlHelp();
   #endif
 }  }
   
 CAsir32guiView::~CAsir32guiView()  CAsir32guiView::~CAsir32guiView()
Line 165  CAsir32guiDoc* CAsir32guiView::GetDocument() // 非デバ
Line 187  CAsir32guiDoc* CAsir32guiView::GetDocument() // 非デバ
   
 void CAsir32guiView::PutChar(int c)  void CAsir32guiView::PutChar(int c)
 {  {
   int i;    int i,len;
   char buf[2];    char buf[2];
   
     if ( EndPos >= sizeof(Buffer)-1 ) {
         Beep(); return;
     }
   for ( i = EndPos-1; i >= CurrentPos; i-- )    for ( i = EndPos-1; i >= CurrentPos; i-- )
     Buffer[i+1] = Buffer[i];        Buffer[i+1] = Buffer[i];
   Buffer[CurrentPos] = (char)c;    Buffer[CurrentPos] = (char)c;
   buf[0] = (char)c; buf[1] = 0;  //  buf[0] = (char)c; buf[1] = 0;
   Insert(buf,FALSE);  //  Insert(buf,FALSE);
     len = GetWindowTextLength();
     if ( len+1 >= TextBufferSize )
         DeleteTop();
     CEditView::OnChar(c, 1, 0);
   CurrentPos++;    CurrentPos++;
   EndPos++;    EndPos++;
 }  }
Line 183  void CAsir32guiView::DeleteChar(int count) {
Line 212  void CAsir32guiView::DeleteChar(int count) {
   
   if ( count > (EndPos-CurrentPos) )    if ( count > (EndPos-CurrentPos) )
     count = EndPos - CurrentPos;      count = EndPos - CurrentPos;
   if ( count == 0 )    if ( count > 0 ) {
     Beep();  
   else {  
     EndPos -= count;      EndPos -= count;
     for ( i = CurrentPos; i < EndPos; i++ )      for ( i = CurrentPos; i < EndPos; i++ )
       Buffer[i] = Buffer[i+count];        Buffer[i] = Buffer[i+count];
Line 224  void CAsir32guiView::DeleteTop()
Line 251  void CAsir32guiView::DeleteTop()
   const char *p,*q;    const char *p,*q;
   const char *buf;    const char *buf;
   char null = 0;    char null = 0;
   int len,len0,len1;    int len,len0;
   
   buf = LockBuffer();    buf = LockBuffer();
   len0 = len = strlen(buf);    len0 = len = strlen(buf);
Line 280  void CAsir32guiView::Beep(void) {
Line 307  void CAsir32guiView::Beep(void) {
 }  }
   
 void CAsir32guiView::Paste(void) {  void CAsir32guiView::Paste(void) {
         char buf[2*BUFSIZ];      char buf[2*BUFSIZ];
         const char *src;      const char *src;
         char c;      char c;
         int i,j,l;      int i,j,l;
         HGLOBAL hClip;      HGLOBAL hClip;
   
         if ( asirgui_kind == ASIRGUI_MESSAGE ) {      if ( asirgui_kind == ASIRGUI_MESSAGE ) {
                 Beep(); return;          Beep(); return;
         }      }
   
         if ( OpenClipboard() == FALSE ) {      if ( OpenClipboard() == FALSE ) {
         Beep(); return;          Beep(); return;
     }      }
     hClip = GetClipboardData(CF_TEXT);      hClip = GetClipboardData(CF_TEXT);
     src = (const char *)::GlobalLock(hClip);      src = (const char *)::GlobalLock(hClip);
     if ( !src || (l = strlen(src)) >= 2*BUFSIZ ) {      if ( !src || (l=strlen(src)) >= sizeof(Buffer)-EndPos ) {
         ::CloseClipboard();          ::CloseClipboard();
         Beep(); return;          Beep(); return;
     }      }
         for ( i = j = 0; i < l; i++ )      for ( i = j = 0; i < l; i++ )
                 if ( (c = src[i]) != '\n' && c != '\r' )          if ( (c = src[i]) != '\n' && c != '\r' )
                         buf[j++] = c;               buf[j++] = c;
         buf[j] = 0;      buf[j] = 0;
     ::GlobalUnlock(hClip);      ::GlobalUnlock(hClip);
     ::CloseClipboard();      ::CloseClipboard();
     GetEditCtrl().ReplaceSel(buf);      GetEditCtrl().ReplaceSel(buf);
         strncpy(Buffer+EndPos,buf,j);      l = strlen(buf);
         EndPos += j; CurrentPos = EndPos;      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  #define CTRL(c) (c)&0x1f
Line 346  void CAsir32guiView::OnChar(UINT nChar, UINT nRepCnt, 
Line 377  void CAsir32guiView::OnChar(UINT nChar, UINT nRepCnt, 
 {  {
         // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください          // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
         char *exp_result;          char *exp_result;
           char tmp[BUFSIZ];
           int i;
   
         if ( asirgui_kind == ASIRGUI_MESSAGE ) {          if ( asirgui_kind == ASIRGUI_MESSAGE ) {
                 Beep(); return;                  Beep(); return;
Line 406  void CAsir32guiView::OnChar(UINT nChar, UINT nRepCnt, 
Line 439  void CAsir32guiView::OnChar(UINT nChar, UINT nRepCnt, 
         case CTRL('C'):          case CTRL('C'):
                 send_intr();                  send_intr();
                 /* wake up the engine */                  /* wake up the engine */
                 put_line("");                  tmp[0] = 0;
                   put_line(tmp);
                 return;                  return;
           case CTRL('Y'):
                   Paste(); return;
           case CTRL('I'):
                   return;
         default :          default :
                 if ( nChar >= 0x20 && nChar < 0x7f )                  if ( nChar >= 0x20 && nChar < 0x7f )
                         PutChar(nChar);                          PutChar(nChar);
Line 448  void CAsir32guiView::OnFileOpen() 
Line 486  void CAsir32guiView::OnFileOpen() 
   
         _chdir(prevdir);          _chdir(prevdir);
         CFileDialog     fileDialog(TRUE);          CFileDialog     fileDialog(TRUE);
           fileDialog.m_ofn.lpstrInitialDir = prevdir;
         if ( fileDialog.DoModal() == IDOK ) {          if ( fileDialog.DoModal() == IDOK ) {
                 CString pathName = fileDialog.GetPathName();                  CString pathName = fileDialog.GetPathName();
                 sprintf(cmd,"load(\"%s\");",pathName);                  sprintf(cmd,"load(\"%s\");",pathName);
Line 455  void CAsir32guiView::OnFileOpen() 
Line 494  void CAsir32guiView::OnFileOpen() 
                         if ( *p == '\\' )                          if ( *p == '\\' )
                                 *p = '/';                                  *p = '/';
                 put_line(cmd);                  put_line(cmd);
                 p = strrchr(pathName,'\\');                  strcpy(cmd,pathName);
                   p = strrchr(cmd,'\\');
                 if ( p ) {                  if ( p ) {
                         *p = 0;                          *p = 0;
                         strcpy(prevdir,pathName);                          strcpy(prevdir,cmd);
                 }                  }
         }          }
 }  }
   
   void CAsir32guiView::viewHtmlHelp(char *help)
   {
           char *helpfile;
           char fmt[] = "%s\\%shelp.chm";
           const char *dir = get_helpdir();
           helpfile = (char *)malloc(sizeof(fmt) + strlen(dir) + strlen(help));
           sprintf(helpfile,fmt,dir,help);
   #if _MSC_VER < 1300
       /* Visual C++ 6.0 */
           ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0);
   #else
           CWinApp *top = AfxGetApp();
           top->SetHelpMode(AFX_HELP_TYPE::afxHTMLHelp);
           if (top->m_pszHelpFilePath) {
                   free((void*)top->m_pszHelpFilePath);
           }
           top->m_pszHelpFilePath = helpfile;
           HtmlHelp(HH_DISPLAY_TOPIC, 0);
   #endif
   }
   
 void CAsir32guiView::OnAsirhelp()  void CAsir32guiView::OnAsirhelp()
 {  {
         // TODO: この位置にコマンド ハンドラ用のコードを追加してください          // TODO: この位置にコマンド ハンドラ用のコードを追加してください
         char root[BUFSIZ],errmsg[BUFSIZ],helpfile[BUFSIZ];          viewHtmlHelp("asir");
   
         get_rootdir(root,sizeof(root),errmsg);  
         sprintf(helpfile,"%s\\bin\\asirhelp.chm",root);  
         HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0);  
 }  }
   
 void CAsir32guiView::OnFileLog()  void CAsir32guiView::OnFileLog()
Line 511  void CAsir32guiView::OnEditPaste() 
Line 568  void CAsir32guiView::OnEditPaste() 
     Paste();      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()  void CAsir32guiView::OnFont()
 {  {
         // TODO: この位置にコマンド ハンドラ用のコードを追加してください          // TODO: この位置にコマンド ハンドラ用のコードを追加してください
         int ret;          INT_PTR ret;
         CFontDialog fd(NULL,CF_EFFECTS | CF_SCREENFONTS | CF_FIXEDPITCHONLY);  
         static CFont *f = 0;  
         LOGFONT lf;          LOGFONT lf;
   
           GetFont()->GetLogFont(&lf);
           CFontDialog fd(&lf,CF_EFFECTS | CF_SCREENFONTS | CF_FIXEDPITCHONLY);
           static CFont *f = 0;
   
         ret = fd.DoModal();          ret = fd.DoModal();
         if ( ret == IDOK ) {          if ( ret == IDOK ) {
                 fd.GetCurrentFont(&lf);                  fd.GetCurrentFont(&lf);
Line 527  void CAsir32guiView::OnFont() 
Line 598  void CAsir32guiView::OnFont() 
                 f = new CFont;                  f = new CFont;
                 f->CreateFontIndirect(&lf);                  f->CreateFontIndirect(&lf);
                 SetFont(f);                  SetFont(f);
                   UpdateMetrics();
         }          }
 }  }
   
Line 536  int CAsir32guiView::OnCreate(LPCREATESTRUCT lpCreateSt
Line 608  int CAsir32guiView::OnCreate(LPCREATESTRUCT lpCreateSt
                 return -1;                  return -1;
   
         // TODO: この位置に固有の作成用コードを追加してください          // TODO: この位置に固有の作成用コードを追加してください
   
         LOGFONT logFont; memset(&logFont, 0, sizeof(LOGFONT));          LOGFONT logFont; memset(&logFont, 0, sizeof(LOGFONT));
         logFont.lfHeight = 20;          logFont.lfHeight = 20;
         logFont.lfCharSet = DEFAULT_CHARSET;          logFont.lfCharSet = DEFAULT_CHARSET;
Line 544  int CAsir32guiView::OnCreate(LPCREATESTRUCT lpCreateSt
Line 616  int CAsir32guiView::OnCreate(LPCREATESTRUCT lpCreateSt
         CFont *f = new CFont;          CFont *f = new CFont;
         f->CreateFontIndirect(&logFont);          f->CreateFontIndirect(&logFont);
         SetFont(f);          SetFont(f);
           UpdateMetrics();
         GetEditCtrl().LimitText(nMaxSize);          GetEditCtrl().LimitText(nMaxSize);
         GetEditCtrl().SetTabStops(m_nTabStops);          GetEditCtrl().SetTabStops(m_nTabStops);
   
         return 0;          return 0;
   }
   
   void CAsir32guiView::OnContribhelp()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("cman");
   }
   
   void CAsir32guiView::OnSize(UINT nType, int cx, int cy)
   {
           CEditView::OnSize(nType, cx, cy);
   
           // TODO: この位置にメッセージ ハンドラ用のコードを追加してください
           UpdateMetrics();
   }
   
   void CAsir32guiView::OnDsolv()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("dsolv");
   }
   
   void CAsir32guiView::OnGnuplot()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("gnuplot");
   }
   
   void CAsir32guiView::OnOkdiff()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("ok_diff");
   }
   
   void CAsir32guiView::OnOkdmodule()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("ok_dmodule");
   }
   
   void CAsir32guiView::OnOm()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("om");
   }
   
   void CAsir32guiView::OnPfpcoh()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("pfpcoh");
   }
   
   void CAsir32guiView::OnPlucker()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("plucker");
   }
   
   void CAsir32guiView::OnSm1()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("sm1");
   }
   
   void CAsir32guiView::OnTigers()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("tigers");
   }
   
   void CAsir32guiView::OnTodoparametrize()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("todo_parametrize");
   }
   
   void CAsir32guiView::OnNoromatrix()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("noro_matrix");
   }
   
   void CAsir32guiView::OnNoromwl()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("noro_mwl");
   }
   
   void CAsir32guiView::OnNoropd()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("noro_pd");
   }
   
   void CAsir32guiView::OnNnndbf()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("nn_ndbf");
   }
   
   void CAsir32guiView::OnNstwistedlog()
   {
           // TODO: この位置にコマンド ハンドラ用のコードを追加してください
           viewHtmlHelp("ns_twistedlog");
   }
   
   BOOL CAsir32guiView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
   {
           // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
   
           BOOL ret = CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
           FILE *fp = NULL;
           char *temp;
           char rootdir[BUFSIZ], errmsg[BUFSIZ], hndname[_MAX_PATH];
   
           if ( asirgui_kind == ASIRGUI_MAIN ) {
                   if (get_rootdir(rootdir, BUFSIZ, errmsg)) {
                           sprintf(hndname, "%s\\bin\\asirgui.hnd", rootdir);
                           fp = fopen(hndname,"w");
                           if ( fp ) {
                                   fprintf(fp,"%d",(unsigned int)theView->m_hWnd);
                                   fclose(fp);
                           }
                   }
                   if ( temp = getenv("TEMP") ) {
                           sprintf(hndname,"%s\\asirgui.hnd", temp);
                           fp = fopen(hndname,"w");
                           if ( fp ) {
                                   fprintf(fp,"%d",(unsigned int)theView->m_hWnd);
                                   fclose(fp);
                           }
                   }
           }
           return ret;
 }  }

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.30

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>