Revision: 10033 https://osdn.net/projects/ttssh2/scm/svn/commits/10033 Author: doda Date: 2022-06-30 02:56:44 +0900 (Thu, 30 Jun 2022) Log Message: ----------- 起動時に0除算エラーが出る問題を修正した 問題: r9980以降、起動時に0除算エラーが発生して起動しなくなる 原因: 非表示状態のウィンドウを元に文字セルのサイズを計算しようとした結果 サイズが正確に取れず0となり0除算を行っていた。 r9980より前は、一度ホストに接続するまではcv.HWinが設定されていない為 VTウィンドウの情報が取得できずに文字セルのサイズの計算を途中で諦めていた。 r9980で起動時にcv.HWinが設定されるようになった。 これにより、接続前でもサイズ変更が正しく行えるようになったが、同時に まだ非表示の段階で文字セルのサイズを計算しようとしてしまい、クライアント 領域のサイズが正しく取れず文字セルの縦幅が0になってしまっていた。 対処: 文字セルのサイズが0の時は計算を打ち切るようにした。 これにより最初のメニュー初期化時には項目が正しく初期化されないが、 実際にメニューを表示する時に再度計算が行われて正しい値でメニュー項目が 設定される。 Modified Paths: -------------- trunk/TTXSamples/TTXResizeMenu/TTXResizeMenu.c -------------- next part -------------- Modified: trunk/TTXSamples/TTXResizeMenu/TTXResizeMenu.c =================================================================== --- trunk/TTXSamples/TTXResizeMenu/TTXResizeMenu.c 2022-06-28 15:11:16 UTC (rev 10032) +++ trunk/TTXSamples/TTXResizeMenu/TTXResizeMenu.c 2022-06-29 17:56:44 UTC (rev 10033) @@ -73,7 +73,9 @@ margin_w = (rc_wnd.right - rc_wnd.left) - (rc_cl.right - rc_cl.left); cell_w = (rc_cl.right - rc_cl.left) / pvar->ts->TerminalWidth; - *width = (rc_dsk.right - rc_dsk.left - margin_w) / cell_w; + if (cell_w > 0) { + *width = (rc_dsk.right - rc_dsk.left - margin_w) / cell_w; + } } if (height) { int margin_h, cell_h; @@ -81,7 +83,9 @@ margin_h = (rc_wnd.bottom - rc_wnd.top) - (rc_cl.bottom - rc_cl.top); cell_h = (rc_cl.bottom - rc_cl.top) / pvar->ts->TerminalHeight; - *height = (rc_dsk.bottom - rc_dsk.top - margin_h) / cell_h; + if (cell_h > 0) { + *height = (rc_dsk.bottom - rc_dsk.top - margin_h) / cell_h; + } } return TRUE;