[問題] screen.c

看板PttCurrent作者 (You are dead.)時間21年前 (2005/03/05 22:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我在 trace screen.c 的時候我覺得有些地方怪怪的.. 我把相關的部分列出來 t_columns: 目前 Client Term 的大小 scr_cols : == ANSILINELEN (511) 也就是說,每一行最多有幾個字元 cur_col : 目前游標所在的第幾的字元 tc_col : 上一次由標所在的地方 rel_move(): 根據上一次游標所在的位置以及即將移動的位置 輸出相對應的控制碼 (他只會輸出 \r 或是 \n) 首先是為什麼 rel_move 裡面一開始 if (new_ln >= t_lines || new_col >= t_columns) return; 是用 t_lines, t_columns 而不是用 scr_lns, scr_cols 照理說在很多地方都有將 cur_col 當作引數 而 cur_col 的範圍是在 0~511, t_columns 一般是 80 如果碰到 ASCII 圖片很容易就爆掉直接 return 用到 tc_col 的只有四個函式 rel_move() redoscr() refresh() redoln() 不過 redoscr() 和 refresh() 中會計算 tc_col tc_col += len; if (tc_col >= t_columns) { /* XXX Is this code right? */ if (automargins) tc_col = t_columns - 1; else { tc_col -= t_columns; tc_line++; if (tc_line >= t_lines) tc_line = b_lines; } } 假設我們在編輯 ASCII 圖片,tc_col 原本就超過 t_columns , 而 len 是這次輸出的長度, automargins 值為 1 所以 tc_col 得出的是一個怪怪的值, t_columns - 1 照理說應該是 scr_cols - 1 所以我覺得這些地方的 t_columns 應該改成 scr_cols 不過為什麼目前 Ptt 畫面沒有東跳跳西跳跳,還運作的很好 這也是我覺得很奇怪的原因:p --- 我會來看這部分的 code 的原因很奇怪 是因為我自己的 code 在宣告 t_columns 是設定 80 然後經過一個初使化的函式把 t_columns 改成 ANSILINELEN 我把他改回 80 然後畫面開始爆走 XD 把這些地方改成 scr_cols 就好了:p -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.32.80.33
文章代碼(AID): #12ASBz4l (PttCurrent)